[MIRROR] tgui update (#10586)

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-04-03 20:56:52 +02:00
committed by GitHub
co-authored by Kashargul
parent 5f9c888101
commit 8a845268f7
20 changed files with 238 additions and 1553 deletions
@@ -191,7 +191,7 @@
return
if(LAZYLEN(vore_organs))
return
//.=..() //Dont need this, it just spawns the parent's guts
var/obj/belly/B = new /obj/belly(src)
B.name = "stomach"
B.desc = "The exotic leopardmander tosses its head back with you firmly clasped in its jaws, and in a few swift moments it finishes swallowing you down into its hot, brightly glowing gut. Your weight makes absolutely no impact on its form, the doughy walls giving way beneath you, with their unnatural softness. The thick, humid air is tinged with an oddly pleasant smell, and the surrounding flesh wastes no time in clenching and massaging down over its newfound fodder, smothering you in thick hot gutflesh~ You can only really sort of see outside that thick-walled gut."
@@ -246,6 +246,7 @@
B.autotransferlocation = "stomach"
B.escapetime = 1 SECONDS
B.escapechance = 75
. = ..()
/obj/random/mob/leopardmander/item_to_spawn() //Random map spawner
return pick(prob(89);/mob/living/simple_mob/vore/leopardmander,
-24
View File
@@ -1,24 +0,0 @@
# VChat
(Please add to this file as you learn how this thing works. Thank you!)
## Development
To implement changes to VChat, one must modify either vchat.js or vchat_client,
where vchat.js corresponds to what actually appears to the user.
Not all of the logic is isolated within vchat_client, vchat.js handles a significant amount of processing as well.
### vchat.js
vchat.js is a development file - it is not actually included in the actual game code. Instead, what the game expects is
the minified version "vchat.min.js"
Therefore, to have your changes in "vchat.js" apply to the game for either PR or testing - you must first minify your script.
If you are unfamiliar how to, simply you copy the file contants in vchat.js, paste them into https://codebeautify.org/minify-js
or any similar tool and paste its output into vchat.min.js .
As of 2023/08/05, no tool is provided by the codebase to handle minification for the developer.
### ss13styles.css
Handles chat colours, background colours, filtering.
Please keep this file synchronized with code\stylesheet.dm where possible (filters, lightmode colours).
-120
View File
@@ -1,120 +0,0 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="semantic.min.css" />
<link rel="stylesheet" type="text/css" href="vchat-font-embedded.css" />
<link rel="stylesheet" type="text/css" href="ss13styles.css" />
</head>
<body>
<div class="ui top fixed pointing menu">
<div class="item">
Main
</div>
<div class="item">
OOC
<div class="ui top right attached red label">15</div>
</div>
<div class="right menu">
<div class="item" style="cursor: pointer;" title="New Tab"><i class="icon-folder-add"></i></div>
<div class="item" style="cursor: pointer;" title="Pause Autoscroll">
<i class="icon-pause-outline" :class="{ blinkwarn: paused }"></i>
</div>
<div class="item" style="cursor: pointer;" title="Edit Mode">
<i class="icon-cog-outline" :class="{ blinkwarn: editing }"></i>
</div>
<div class="item" style="padding-left: 0px !important;"><span class="ui circular label" title="VChat Latency (Not exactly network latency)" :class="ping_classes">{{latency}}ms</span></div>
</div>
</div>
<div id="contentbox">
<div class="ui segment">
<span class='game say'><b>Test Person</b> says, "Testing say message."</span><br>
<span class='notice'>Testing notice message.</span><br>
<span class='danger'>Testing danger message.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message."</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message.</span></span><br>
<span class='looc'>Testing LOOC message.</span><br>
<span class='rlooc'>Testing RLOOC message.</span><br>
<span class='admin_channel'>Testing asay message.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 2."</span><br>
<span class='notice'>Testing notice message 2.</span><br>
<span class='danger'>Testing danger message 2.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 2".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 2.</span></span><br>
<span class='looc'>Testing LOOC message 2.</span><br>
<span class='rlooc'>Testing RLOOC message 2.</span><br>
<span class='admin_channel'>Testing asay message 2.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 3."</span><br>
<span class='notice'>Testing notice message 3.</span><br>
<span class='danger'>Testing danger message 3.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 3".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 3.</span></span><br>
<span class='looc'>Testing LOOC message 3.</span><br>
<span class='rlooc'>Testing RLOOC message 3.</span><br>
<span class='admin_channel'>Testing asay message 3.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 4."</span><br>
<span class='notice'>Testing notice message 4.</span><br>
<span class='danger'>Testing danger message 4.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 4".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 4.</span></span><br>
<span class='looc'>Testing LOOC message 4.</span><br>
<span class='rlooc'>Testing RLOOC message 4.</span><br>
<span class='admin_channel'>Testing asay message 4.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 5."</span><br>
<span class='notice'>Testing notice message 5.</span><br>
<span class='danger'>Testing danger message 5.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 5".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 5.</span></span><br>
<span class='looc'>Testing LOOC message 5.</span><br>
<span class='rlooc'>Testing RLOOC message 5.</span><br>
<span class='admin_channel'>Testing asay message 5.</span><br>
</div>
<div class="ui segment inverted">
<span class='game say'><b>Test Person</b> says, "Testing say message."</span><br>
<span class='notice'>Testing notice message.</span><br>
<span class='danger'>Testing danger message.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message."</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message.</span></span><br>
<span class='looc'>Testing LOOC message.</span><br>
<span class='rlooc'>Testing RLOOC message.</span><br>
<span class='admin_channel'>Testing asay message.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 2."</span><br>
<span class='notice'>Testing notice message 2.</span><br>
<span class='danger'>Testing danger message 2.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 2".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 2.</span></span><br>
<span class='looc'>Testing LOOC message 2.</span><br>
<span class='rlooc'>Testing RLOOC message 2.</span><br>
<span class='admin_channel'>Testing asay message 2.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 3."</span><br>
<span class='notice'>Testing notice message 3.</span><br>
<span class='danger'>Testing danger message 3.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 3".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 3.</span></span><br>
<span class='looc'>Testing LOOC message 3.</span><br>
<span class='rlooc'>Testing RLOOC message 3.</span><br>
<span class='admin_channel'>Testing asay message 3.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 4."</span><br>
<span class='notice'>Testing notice message 4.</span><br>
<span class='danger'>Testing danger message 4.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 4".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 4.</span></span><br>
<span class='looc'>Testing LOOC message 4.</span><br>
<span class='rlooc'>Testing RLOOC message 4.</span><br>
<span class='admin_channel'>Testing asay message 4.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 5."</span><br>
<span class='notice'>Testing notice message 5.</span><br>
<span class='danger'>Testing danger message 5.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 5".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 5.</span></span><br>
<span class='looc'>Testing LOOC message 5.</span><br>
<span class='rlooc'>Testing RLOOC message 5.</span><br>
<span class='admin_channel'>Testing asay message 5.</span><br>
</div>
</div>
</body>
</html>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-270
View File
@@ -1,270 +0,0 @@
/* VChat Styles */
body.inverted {
background-color: #111111;
}
#topmenu {
overflow-x: auto;
overflow-y: hidden;
}
#contentbox {
margin-top: 3.3rem; /* Make room for the fixed top menu */
overflow-wrap: break-word;
word-wrap: break-word; /* IE, blah */
}
.menu, .item {
padding-top: 0.2em !important;
padding-bottom: 0.2em !important;
}
.ui.menu .item > .label:not(.floating) {
margin-left: 0;
padding-bottom: 0;
padding-top: 0;
text-align: center;
font-size: 10px;
}
.item {
cursor: pointer;
}
.inputbox {
width: 5em !important;
padding: 0.1em !important;
}
.icon-left-open-outline:hover, .icon-right-open-outline:hover, .icon-cancel-circled-outline:hover {
color: red;
}
.blinkwarn {
color: #FF0000;
animation: blink-animation 1s steps(5, start) infinite;
}
@keyframes blink-animation {
to {
visibility: hidden;
}
}
/* SS13 Styles */
#messagebox {font-family: Verdana, sans-serif;}
#messagebox h1, #messagebox h2, #messagebox h3, #messagebox h4, #messagebox h5, #messagebox h6 {color: #0000ff; font-family: Georgia, Verdana, sans-serif;}
#messagebox em {font-style: normal; font-weight: bold;}
#messagebox a {text-decoration: underline;}
.motd {color: #638500;font-family: Verdana, sans-serif;}
.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6
{color: #638500;text-decoration: underline;}
.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover
{color: #638500;}
.prefix {font-weight: bold;}
.log_message {color: #386AFF; font-weight: bold;}
/*.inverted .message {color: #386AFF; font-weight: bold;}*/
/* OOC */
.ooc {font-weight: bold;}
.ooc img.text_tag {width: 32px; height: 10px;}
.ooc .everyone {color: #002eb8;}
.inverted .ooc .everyone {color: #004ed8;} /* Dark mode */
.looc {color: #3A9696; font-weight: bold}
.rlooc {color: #3ABB96; font-weight: bold}
.ooc .elevated {color: #2e78d9;}
.ooc .moderator {color: #184880;}
.ooc .developer {color: #1b521f;}
.ooc .admin {color: #b82e00;}
.ooc .event_manager {color: #660033;}
.ooc .aooc {color: #960018;}
/* Admin: Private Messages */
.pm .howto {color: #ff0000; font-weight: bold; font-size: 200%;}
.pm .in {color: #ff0000;}
.pm .out {color: #ff0000;}
.pm .other {color: #0000ff;}
/* Admin: Channels */
.mentor {color: #808000;}
.mentor_channel {color: #808000; font-weight: bold;}
.mod_channel {color: #735638; font-weight: bold;}
.mod_channel .admin {color: #b82e00; font-weight: bold;}
.admin_channel {color: #9611D4; font-weight: bold;}
.event_channel {color: #cc3399; font-weight: bold;}
/* Radio: Misc */
.deadsay {color: #530FAD;}
.inverted .deadsay {color: #732FCD;} /* Dark mode */
.radio {color: #008000;}
.inverted .radio {color: #00a800;} /* Dark mode */
.deptradio {color: #ff00ff;} /* when all other department colors fail */
.newscaster {color: #750000;}
/* Radio Channels */
.comradio {color: #193A7A;}
.inverted .comradio {color: #395A9A;} /* Dark mode */
.syndradio {color: #6D3F40;}
.centradio {color: #5C5C8A;}
.airadio {color: #FF00FF;}
.entradio {color: #339966;}
.secradio {color: #A30000;}
.engradio {color: #A66300;}
.medradio {color: #008160;}
.sciradio {color: #993399;}
.supradio {color: #5F4519;}
.srvradio {color: #6eaa2c;}
.expradio {color: #555555;}
/* Miscellaneous */
.name {font-weight: bold;}
.say {color: #000000;}
.inverted .say {color: #FFFFFF;}
.emote {color: #000000;}
.inverted .emote {color: #FFFFFF;}
.alert {color: #ff0000;}
.valert {color: #ff0000;}
h1.alert, h2.alert {color: #000000;}
/* VOREStation Add Start */
.nif {}
.psay {color: #800080;font-style: italic;}
.inverted .psay {color: #e300e4;font-style: italic;}
.pemote {color: #800080;font-style: italic;}
.inverted .pemote {color: #e300e4;font-style: italic;}
/* VOREStation Add End */
/* Game Messages */
.attack {color: #ff0000;}
.moderate {color: #CC0000;}
.disarm {color: #990000;}
.passive {color: #660000;}
.critical {color: #ff0000; font-weight: bold; font-size: 150%;}
.danger {color: #ff0000; font-weight: bold;}
.vdanger {color: #ff0000; font-weight: bold;}
.warning {color: #ff0000; font-style: italic;}
.vwarning {color: #ff0000; font-style: italic;}
.rose {color: #ff5050;}
.info {color: #0000CC;}
.inverted .info {color: #6060c9;} /* Dark mode */
.notice {color: #000099;}
.inverted .notice {color: #6060c9;} /* Dark mode */
.vnotice {color: #000099;}
.inverted .vnotice {color: #6060c9;} /* Dark mode */
.alium {color: #00ff00;}
.cult {color: #800080; font-weight: bold; font-style: italic;}
.reflex_shoot {color: #000099; font-style: italic;}
/* Languages */
.alien {color: #543354;font-style: italic;}
.tajaran {color: #803B56;}
.tajaran_signlang {color: #941C1C;}
.akhani {color: #AC398C;}
.skrell {color: #00B0B3;}
.skrellfar {color: #70FCFF;}
.soghun {color: #50BA6C;}
.solcom {color: #3333CE;}
.inverted .solcom {color: #6da6f0;}
.changeling {color: #800080;font-style: italic;}
.inverted .changeling {color: #b000b1;}
.sergal {color: #0077FF;}
.birdsongc {color: #CC9900;}
.vulpkanin {color: #B97A57;}
.tavan {color: #f54298; font-family: Arial}
.echosong {color: #826D8C;}
.enochian {color: #848A33; letter-spacing:-1pt; word-spacing:4pt; font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;}
.daemon {color: #5E339E; letter-spacing:-1pt; word-spacing:0pt; font-family: "Courier New", Courier, monospace;}
.drudakar {color: #bb2463; word-spacing:0pt; font-family: "High Tower Text", monospace;}
.bug {color: #9e9e39;}
.vox {color: #AA00AA;}
.promethean {color: #5A5A5A; font-family:"Comic Sans MS","Comic Sans",cursive;}
.inverted .promethean {color: #A5A5A5; font-family:"Comic Sans MS","Comic Sans",cursive;}
.zaddat {color: #941C1C;}
.rough {font-family: "Trebuchet MS", cursive, sans-serif;}
.say_quote {font-family: Georgia, Verdana, sans-serif;}
.say_quote_italics {font-style: italic; font-family: Georgia, Verdana, sans-serif;}
.terminus {font-family: "Times New Roman", Times, serif, sans-serif}
.interface {color: #330033;}
.psionic {color: #993399;}
.wingdings {color: #0077FF;font-family: Wingdings, Webdings}
.spacer {color: #9c660b;} /* VOREStation Add */
.blob {color: #ff950d; font-weight: bold; font-style: italic;}
.teppi {color: #816540; word-spacing:4pt; font-family: "Segoe Script Bold","Segoe Script",sans-serif,Verdana;}
.shadekin {color: #be3cc5; font-size: 150%; font-weight: bold; font-family: "Gabriola", cursive, sans-serif;}
.black {color: #000000;}
.darkgray {color: #808080;}
.gray {color: #A9A9A9;}
.red {color: #FF0000;}
.orange {color: #FF8C00;}
.blue {color: #0000FF;}
.green {color: #00DD00;}
.inverted .black {color: #606060;}
.inverted .darkgray {color: #808080;}
.inverted .gray {color: #A9A9A9;}
.inverted .red {color: #FF4444;}
.inverted .orange {color: #FF8C00;}
.inverted .blue {color: #6666FF;}
.inverted .green {color: #44FF44;}
.pnarrate {color: #009AB2;}
/*BIG IMG.icon {width: 32px; height: 32px;}*/
img.icon {vertical-align: middle; max-height: 1em;}
img.icon.bigicon {max-height: 32px;}
/* Zoom levels - Replaced with arbitrary font sizes
.zoom_normal {
font-size: 0.9em;
line-height: 1.35;
}
.zoom_more {
font-size: 1.2em;
line-height: 1.4;
}
.zoom_less {
font-size: 0.8em;
line-height: 1.2;
}
*/
/* Debug Logs */
.debug_error {color:#FF0000; font-weight:bold}
.debug_warning {color:#FF0000;}
.debug_info {color:#000000;}
.inverted .debug_info {color: #FFFFFF;}
.debug_debug {color:#0000FF;}
.debug_trace {color:#888888;}
/* Log animations */
.msgsanim-enter-active {
transition: opacity 0.5s, transform 0.5s;
}
.msgsanim-enter {
opacity: 0;
transform: translateX(15px);
}
/* Dog mode */
.woof {
background-color: rgba(255,255,255,0) !important;
background-image: url('dog.gif') !important;
background-size: cover !important;
transition: background-color 15s;
}
.woof div, .woof span {
background-color: rgba(0,0,0,0) !important;
transition: background-color 15s;
}
File diff suppressed because one or more lines are too long
-191
View File
@@ -1,191 +0,0 @@
<!DOCTYPE html>
<html debug="true">
<head>
<title>VChat</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- Styles -->
<link rel="stylesheet" type="text/css" href="semantic.min.css" />
<link rel="stylesheet" type="text/css" href="vchat-font-embedded.css" />
<link rel="stylesheet" type="text/css" href="ss13styles.css" />
<!-- Important scripts -->
<script type="text/javascript" src="polyfills.min.js"></script>
<script type="text/javascript" src="vue.min.js"></script>
<script type="text/javascript" src="vchat.min.js"></script>
</head>
<body>
<div id="loader">
<p>You probably shouldn't see this page. This generally means chat is very broken.</p>
<p>You can wait a few seconds to see if it loads, or try OOC > Reload VChat.</p>
</div>
<div id="app" @mouseup="on_mouseup" style="display: none;" :class="{ inverted: inverted }">
<!-- Top menu -->
<div id="topmenu" class="ui top fixed menu" :class="{ inverted: inverted }">
<div v-for="(tab,index) in tabs" class="item" :class="{ active: tab.active }" @click="switchtab(tab)" @click.ctrl="editmode">
<i v-show="editing && !tab.immutable && index >= 2" class="icon-left-open-outline" @click.stop.prevent="movetab(tab,-1)" title="Move tab left"></i>
{{tab.name}}
<i v-show="editing && !tab.immutable" class="icon-cancel-circled-outline" @click.stop.prevent="deltab(tab)" title="Delete tab"></i>
<i v-show="editing && !tab.immutable && index != tabs.length-1" class="icon-right-open-outline" @click.stop.prevent="movetab(tab,1)" title="Move tab right"></i>
<div v-if="tab_unread_count(tab) > 0" class="ui top right attached red label">{{tab_unread_count(tab)}}</div>
</div>
<div class="right menu">
<div class="item" @click="newtab" title="New Tab"><i class="icon-folder-add"></i></div>
<div class="item" @click="pause" title="Pause Autoscroll">
<i class="icon-pause-outline" :class="{ blinkwarn: paused }"></i>
</div>
<div class="item" @click="editmode" title="Edit Mode">
<i class="icon-cog-outline" :class="{ blinkwarn: editing }"></i>
</div>
<div class="item" title="Click to test latency">
<span class="ui circular label" :class="ping_classes" @click="do_latency_test">
<template v-if="latency">
{{latency}}ms
</template>
</span>
</div>
</div>
</div>
<!-- Editor box -->
<div id="contentbox">
<div v-show="editing" id="editbox" class="ui segment" :class="{ inverted: inverted }">
<div class="ui internally celled grid" :class="{ inverted: inverted }">
<div class="row">
<div class="sixteen wide column">
<div class="ui center aligned header" :class="{ inverted: inverted }">
<h2>VChat Settings</h2>
</div>
<div style="text-align: center;"><a href="#" @click="editmode">Close Settings</a></div>
</div>
</div>
<div class="row">
<div class="eight wide column">
<h3>'{{active_tab.name}}' Tab Settings</h3>
<span v-show="active_tab.immutable">This tab is immutable. You cannot make changes.</span>
<div v-show="!active_tab.immutable">
<a href="#" @click="renametab">Rename Tab</a> - <a href="#" @click="deltab">Delete Tab</a>
<h5>Messages to display:</h5>
<div class="ui form">
<div class="grouped fields">
<div class="field" v-for="type in type_table" :title="type.tooltip">
<div v-show="!type.admin || is_admin" class="ui slider checkbox" :class="{ inverted: inverted, disabled: type.required || active_tab.immutable, checked: type.required || active_tab.immutable }">
<input type="checkbox" id="type.becomes" :value="type.becomes" v-model="active_tab.categories" :disabled="type.required || active_tab.immutable" :checked="type.required || active_tab.immutable"><label :for="type.becomes">{{type.pretty}}</label>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="eight wide column">
<h3>Global Settings</h3>
<div class="ui form" :class="{ inverted: inverted }">
<div class="grouped fields">
<div class="field">
<div class="ui slider checkbox" :class="{ inverted: inverted }">
<input type="checkbox" id="darkmode" v-model="inverted"><label for="darkmode">Dark Mode</label>
</div>
</div>
<div class="field">
<div class="ui slider checkbox" :class="{ inverted: inverted }">
<input type="checkbox" id="combining" v-model="animated"><label for="animated">Animate Messages</label>
</div>
</div>
</div>
<div class="inline fields">
<label>Combine Messages</label>
<div class="field" title="Combine no messages together.">
<div class="ui radio checkbox">
<input type="radio" id="cnone" name="crushing" v-model.number="crushing" value="0">
<label for="cnone">None</label>
</div>
</div>
<div class="field" title="Try to combine the newest and last message.">
<div class="ui radio checkbox">
<input type="radio" id="cone" name="crushing" v-model.number="crushing" value="1">
<label for="cone">One</label>
</div>
</div>
<div class="field" title="Try to combine the newest and last 3 messages.">
<div class="ui radio checkbox">
<input type="radio" id="cthree" name="crushing" v-model.number="crushing" value="3">
<label for="cthree">Three</label>
</div>
</div>
</div>
<div class="inline fields">
<div class="field" title="Font size (Min 0.2, Max 5, Default 0.9)">
<label>Font Scale</label>
<input class="inputbox" type="number" name="fontsize" placeholder="0.9" v-model.lazy.number="fontsize" required @keyup.enter="blur_this($event)">
</div>
</div>
<div class="inline fields">
<div class="field" title="Line height % (Min 100, Max 200, Default 130)">
<label>Line Height %</label>
<input class="inputbox" type="number" name="lineheight" placeholder="130" v-model.lazy.number="lineheight" required @keyup.enter="blur_this($event)">
</div>
</div>
<div class="inline fields">
<div class="field" title="Hides messages for performance (Min 50, Max 2000, Default 200)">
<label># Stored Messages</label>
<input class="inputbox" type="number" name="showingnum" placeholder="200" v-model.lazy.number="showingnum" required @keyup.enter="blur_this($event)">
</div>
</div>
</div>
<button class="ui button" @click="save_chatlog">Export Chatlog</button>
</div>
</div>
</div>
</div>
<!-- Messages box -->
<div v-show="!editing" id="messagebox" class="ui segment" @click="click_message" :class="{ inverted: inverted }" :style="{fontSize: fontsize+'em', lineHeight: lineheight+'%'}">
<transition-group name="msgsanim" tag="span" :css="animated">
<!-- We're filtering -->
<template v-if="current_categories.length">
<div v-show="unshown_messages > 0" key="hidewarn1"><span class='notice'>[ {{unshown_messages}} previous messages archived for performance. ]</span></div>
<div v-for="message in shown_messages" :key="message.id">
<span v-html="message.content"></span>
<span v-show="message.repeats > 1" class="ui grey circular label">x{{message.repeats}}</span>
</div>
</template>
<!-- We're not filtering, messages go directly to dom -->
<template v-else>
<div v-show="archived_messages.length > 0" key="hidewarn2"><span class='notice'>[ {{archived_messages.length}} previous messages archived for performance. ]</span></div>
<div v-for="message in messages" :key="message.id">
<span v-html="message.content"></span>
<span v-show="message.repeats > 1" class="ui grey circular label">x{{message.repeats}}</span>
</div>
</template>
</transition-group>
</div>
</div>
<!--
<div class="ui segment">
active_tab: {{active_tab}}<br>
current_categories: {{current_categories}}<br>
messages.length: {{messages.length}}<br>
archived_messages.length: {{archived_messages.length}}<br>
shown_messages.length: {{shown_messages.length}}<br>
</div>
-->
</div>
<script type="text/javascript">
//Document Ready
(function(){
start_vchat();
document.getElementById("loader").style.display = 'none';
document.getElementById("app").style.display = 'block';
})();
</script>
</body>
</html>
-78
View File
@@ -1,78 +0,0 @@
// https://tc39.github.io/ecma262/#sec-array.prototype.find
if (!Array.prototype.find) {
Object.defineProperty(Array.prototype, 'find', {
value: function(predicate) {
// 1. Let O be ? ToObject(this value).
if (this == null) {
throw TypeError('"this" is null or not defined');
}
var o = Object(this);
// 2. Let len be ? ToLength(? Get(O, "length")).
var len = o.length >>> 0;
// 3. If IsCallable(predicate) is false, throw a TypeError exception.
if (typeof predicate !== 'function') {
throw TypeError('predicate must be a function');
}
// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
var thisArg = arguments[1];
// 5. Let k be 0.
var k = 0;
// 6. Repeat, while k < len
while (k < len) {
// a. Let Pk be ! ToString(k).
// b. Let kValue be ? Get(O, Pk).
// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
// d. If testResult is true, return kValue.
var kValue = o[k];
if (predicate.call(thisArg, kValue, k, o)) {
return kValue;
}
// e. Increase k by 1.
k++;
}
// 7. Return undefined.
return undefined;
},
configurable: true,
writable: true
});
}
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
//IE ugh
function storageAvailable(type) {
var storage;
try {
storage = window[type];
var x = '__storage_test__';
storage.setItem(x, x);
storage.removeItem(x);
return true;
}
catch(e) {
return e instanceof DOMException && (
// everything except Firefox
e.code === 22 ||
// Firefox
e.code === 1014 ||
// test name field too, because code might not be present
// everything except Firefox
e.name === 'QuotaExceededError' ||
// Firefox
e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
// acknowledge QuotaExceededError only if there's something already stored
(storage && storage.length !== 0);
}
}
-1
View File
@@ -1 +0,0 @@
function storageAvailable(e){var t;try{t=window[e];var r="__storage_test__";return t.setItem(r,r),t.removeItem(r),!0}catch(e){return e instanceof DOMException&&(22===e.code||1014===e.code||"QuotaExceededError"===e.name||"NS_ERROR_DOM_QUOTA_REACHED"===e.name)&&t&&0!==t.length}}Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(e){if(null==this)throw TypeError('"this" is null or not defined');var t=Object(this),r=t.length>>>0;if("function"!=typeof e)throw TypeError("predicate must be a function");for(var n=arguments[1],o=0;o<r;){var a=t[o];if(e.call(n,a,o,t))return a;o++}},configurable:!0,writable:!0}),Date.now||(Date.now=function(){return(new Date).getTime()});
File diff suppressed because one or more lines are too long
-124
View File
@@ -1,124 +0,0 @@
#define VCHAT_FILENAME "data/vchat.db"
GLOBAL_DATUM(vchatdb, /database)
//Boot up db file
/proc/init_vchat()
//Cleanup previous if exists
fdel(VCHAT_FILENAME)
fdel(VCHAT_FILENAME+"-shm") //Shared memory, and
fdel(VCHAT_FILENAME+"-wal") // write ahead. Only present on unclean stop.
//Create a new one
GLOB.vchatdb = new(VCHAT_FILENAME)
//Build our basic boring tables
vchat_create_tables()
//Check to see if it's init
/proc/check_vchat()
if(istype(GLOB.vchatdb))
return TRUE
else
return FALSE
//For INSERT/CREATE/DELETE, etc that return a RowsAffected.
/proc/vchat_exec_update(var/query)
if(!check_vchat())
log_world("There's no vchat database open but you tried to query it with: [query]")
return FALSE
//Solidify our query
var/database/query/q = vchat_build_query(query)
//Run it
q.Execute(GLOB.vchatdb)
//Handle errors
if(q.Error())
log_world("Query \"[islist(query)?query[1]:query]\" ended in error [q.ErrorMsg()]")
return FALSE
return q.RowsAffected()
//For SELECT, that return results.
/proc/vchat_exec_query(var/query)
if(!check_vchat())
log_world("There's no vchat database open but you tried to query it!")
return FALSE
//Solidify our query
var/database/query/q = vchat_build_query(query)
//Run it
q.Execute(GLOB.vchatdb)
//Handle errors
if(q.Error())
log_world("Query \"[islist(query)?query[1]:query]\" ended in error [q.ErrorMsg()]")
return FALSE
//Return any results
var/list/results = list()
//Return results if any.
while(q.NextRow())
results[++results.len] = q.GetRowData()
return results
//Create a query from string or list with params
/proc/vchat_build_query(var/query)
var/database/query/q
if(islist(query))
q = new(arglist(query))
else
q = new(query)
if(!istype(q))
return
return q
/proc/vchat_create_tables()
//Byond is so great half the time it doesn't delete the file
var/cleanup = "DROP TABLE IF EXISTS messages"
vchat_exec_update(cleanup)
//Messages table
var/tabledef = "CREATE TABLE messages(\
id INTEGER PRIMARY KEY AUTOINCREMENT,\
ckey VARCHAR(50) NOT NULL,\
worldtime INTEGER NOT NULL,\
message TEXT NOT NULL)"
vchat_exec_update(tabledef)
//Index on ckey
var/indexdef = "CREATE INDEX ckey_index ON messages (ckey)"
vchat_exec_update(indexdef)
//INSERT a new message
/proc/vchat_add_message(var/ckey, var/message)
if(!ckey || !message)
return
var/list/messagedef = list(
"INSERT INTO messages (ckey,worldtime,message) VALUES (?, ?, ?)",
ckey,
world.time || 0,
message)
return vchat_exec_update(messagedef)
//Get a player's message history. If limit is supplied, messages will be in reverse order.
/proc/vchat_get_messages(var/ckey, var/limit)
if(!ckey)
return
var/list/getdef
if (limit)
getdef = list("SELECT * FROM messages WHERE ckey = ? ORDER BY id DESC LIMIT [text2num(limit)]", ckey)
else
getdef = list("SELECT * FROM messages WHERE ckey = ?", ckey)
return vchat_exec_query(getdef)
#undef VCHAT_FILENAME
@@ -153,6 +153,7 @@
"The gryphon lightly sways its filled gut, tossing you around inside of the tight chamber.",
"A sudden pressure presses down across your body as the gryphon gives its gut a squeeze.",
"Sitting in the hot, stewing guts of the gryphon you wonder when someone will finally notice that you've disappeared.")
. = ..()
/mob/living/simple_mob/vore/gryphon/do_special_attack(atom/A) //Mostly copied from cryptdrake.dm
set waitfor = FALSE
@@ -164,8 +164,7 @@
B.vore_sound = "Stomach Move"
B.sound_volume = 20
if(!soulgem)
soulgem = new(src)
. = ..()
/obj/belly/longneck
affects_vore_sprites = TRUE
+1 -1
View File
@@ -54,7 +54,7 @@
"sass-loader": "^16.0.3",
"style-loader": "^4.0.0",
"swc-loader": "^0.2.6",
"tgui-core": "^1.8.2",
"tgui-core": "^1.8.4",
"typescript": "5.6.3",
"typescript-eslint": "^8.28.0",
"url-loader": "^4.1.1",
+1 -1
View File
@@ -13,6 +13,6 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"tgui": "workspace:*",
"tgui-core": "^1.8.2"
"tgui-core": "^1.8.4"
}
}
+1 -1
View File
@@ -10,7 +10,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"tgui": "workspace:*",
"tgui-core": "^1.8.2",
"tgui-core": "^1.8.4",
"tgui-dev-server": "workspace:*",
"tgui-polyfill": "workspace:*"
}
+1 -1
View File
@@ -9,7 +9,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"tgui": "workspace:*",
"tgui-core": "^1.8.2",
"tgui-core": "^1.8.4",
"tgui-polyfill": "workspace:*"
}
}
+1 -1
View File
@@ -18,7 +18,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-popper": "^2.3.0",
"tgui-core": "^1.8.2",
"tgui-core": "^1.8.4",
"tgui-dev-server": "workspace:*",
"tgui-polyfill": "workspace:*"
}
+229 -151
View File
@@ -183,9 +183,9 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-define-polyfill-provider@npm:^0.6.3":
version: 0.6.3
resolution: "@babel/helper-define-polyfill-provider@npm:0.6.3"
"@babel/helper-define-polyfill-provider@npm:^0.6.3, @babel/helper-define-polyfill-provider@npm:^0.6.4":
version: 0.6.4
resolution: "@babel/helper-define-polyfill-provider@npm:0.6.4"
dependencies:
"@babel/helper-compilation-targets": "npm:^7.22.6"
"@babel/helper-plugin-utils": "npm:^7.22.5"
@@ -194,7 +194,7 @@ __metadata:
resolve: "npm:^1.14.2"
peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
checksum: 10c0/4320e3527645e98b6a0d5626fef815680e3b2b03ec36045de5e909b0f01546ab3674e96f50bf3bc8413f8c9037e5ee1a5f560ebdf8210426dad1c2c03c96184a
checksum: 10c0/b74f2b46e233a178618d19432bdae16e0137d0a603497ee901155e083c4a61f26fe01d79fb95d5f4c22131ade9d958d8f587088d412cca1302633587f070919d
languageName: node
linkType: hard
@@ -1866,13 +1866,13 @@ __metadata:
linkType: hard
"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
version: 4.5.0
resolution: "@eslint-community/eslint-utils@npm:4.5.0"
version: 4.5.1
resolution: "@eslint-community/eslint-utils@npm:4.5.1"
dependencies:
eslint-visitor-keys: "npm:^3.4.3"
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
checksum: 10c0/0fad96181bd73ef7254ba61dbbca460a41fe155880122db8852e75c1063617dc60005ff31a7354ecf9dbfcb46fce4349ceca5c1d24db036c5aa39a4bf622fafc
checksum: 10c0/b520ae1b7bd04531a5c5da2021071815df4717a9f7d13720e3a5ddccf5c9c619532039830811fcbae1c2f1c9d133e63af2435ee69e0fc0fabbd6d928c6800fb2
languageName: node
linkType: hard
@@ -1943,9 +1943,9 @@ __metadata:
linkType: hard
"@fastify/error@npm:^4.0.0":
version: 4.0.0
resolution: "@fastify/error@npm:4.0.0"
checksum: 10c0/074b8a6c350c29a8fc8314298d9457fe0c1ba6e7f160e9ae6ba0e18853f1ec7427d768f966700cbf67a4694f3a9a593c6a23e42ce3ed62e40fecdf8026040d9a
version: 4.1.0
resolution: "@fastify/error@npm:4.1.0"
checksum: 10c0/11215eb80ec0bd0a6333d8e939461123269cdbb2eb9ec853faee50f2b8284cbd7a826e654665ff37c120bdfc4a6e0f2f17f33f84f2255291a234b012dd129d53
languageName: node
linkType: hard
@@ -3160,90 +3160,90 @@ __metadata:
languageName: node
linkType: hard
"@swc/core-darwin-arm64@npm:1.11.13":
version: 1.11.13
resolution: "@swc/core-darwin-arm64@npm:1.11.13"
"@swc/core-darwin-arm64@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-darwin-arm64@npm:1.11.11"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-x64@npm:1.11.13":
version: 1.11.13
resolution: "@swc/core-darwin-x64@npm:1.11.13"
"@swc/core-darwin-x64@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-darwin-x64@npm:1.11.11"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@swc/core-linux-arm-gnueabihf@npm:1.11.13":
version: 1.11.13
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.11.13"
"@swc/core-linux-arm-gnueabihf@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.11.11"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@swc/core-linux-arm64-gnu@npm:1.11.13":
version: 1.11.13
resolution: "@swc/core-linux-arm64-gnu@npm:1.11.13"
"@swc/core-linux-arm64-gnu@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-linux-arm64-gnu@npm:1.11.11"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-arm64-musl@npm:1.11.13":
version: 1.11.13
resolution: "@swc/core-linux-arm64-musl@npm:1.11.13"
"@swc/core-linux-arm64-musl@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-linux-arm64-musl@npm:1.11.11"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@swc/core-linux-x64-gnu@npm:1.11.13":
version: 1.11.13
resolution: "@swc/core-linux-x64-gnu@npm:1.11.13"
"@swc/core-linux-x64-gnu@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-linux-x64-gnu@npm:1.11.11"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-x64-musl@npm:1.11.13":
version: 1.11.13
resolution: "@swc/core-linux-x64-musl@npm:1.11.13"
"@swc/core-linux-x64-musl@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-linux-x64-musl@npm:1.11.11"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@swc/core-win32-arm64-msvc@npm:1.11.13":
version: 1.11.13
resolution: "@swc/core-win32-arm64-msvc@npm:1.11.13"
"@swc/core-win32-arm64-msvc@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-win32-arm64-msvc@npm:1.11.11"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@swc/core-win32-ia32-msvc@npm:1.11.13":
version: 1.11.13
resolution: "@swc/core-win32-ia32-msvc@npm:1.11.13"
"@swc/core-win32-ia32-msvc@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-win32-ia32-msvc@npm:1.11.11"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@swc/core-win32-x64-msvc@npm:1.11.13":
version: 1.11.13
resolution: "@swc/core-win32-x64-msvc@npm:1.11.13"
"@swc/core-win32-x64-msvc@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-win32-x64-msvc@npm:1.11.11"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@swc/core@npm:^1.9.1":
version: 1.11.13
resolution: "@swc/core@npm:1.11.13"
version: 1.11.11
resolution: "@swc/core@npm:1.11.11"
dependencies:
"@swc/core-darwin-arm64": "npm:1.11.13"
"@swc/core-darwin-x64": "npm:1.11.13"
"@swc/core-linux-arm-gnueabihf": "npm:1.11.13"
"@swc/core-linux-arm64-gnu": "npm:1.11.13"
"@swc/core-linux-arm64-musl": "npm:1.11.13"
"@swc/core-linux-x64-gnu": "npm:1.11.13"
"@swc/core-linux-x64-musl": "npm:1.11.13"
"@swc/core-win32-arm64-msvc": "npm:1.11.13"
"@swc/core-win32-ia32-msvc": "npm:1.11.13"
"@swc/core-win32-x64-msvc": "npm:1.11.13"
"@swc/core-darwin-arm64": "npm:1.11.11"
"@swc/core-darwin-x64": "npm:1.11.11"
"@swc/core-linux-arm-gnueabihf": "npm:1.11.11"
"@swc/core-linux-arm64-gnu": "npm:1.11.11"
"@swc/core-linux-arm64-musl": "npm:1.11.11"
"@swc/core-linux-x64-gnu": "npm:1.11.11"
"@swc/core-linux-x64-musl": "npm:1.11.11"
"@swc/core-win32-arm64-msvc": "npm:1.11.11"
"@swc/core-win32-ia32-msvc": "npm:1.11.11"
"@swc/core-win32-x64-msvc": "npm:1.11.11"
"@swc/counter": "npm:^0.1.3"
"@swc/types": "npm:^0.1.19"
peerDependencies:
@@ -3272,7 +3272,7 @@ __metadata:
peerDependenciesMeta:
"@swc/helpers":
optional: true
checksum: 10c0/cb27cd19a14a35b54deb4827fdc43cb8761678b651479d845928bdd485a6c5d7498d4d75d5b863eb5bacc439f6e1bc44886099d8063f04331f9029b7c89d6b99
checksum: 10c0/ae7038336e1e4dd1c4357c82fd1c8b76c80f0650d103714fc21dcf9b707f60be9bb8edb8de3a9ea26e6956a215c83759f6a77d8c9175ac760e6f9c192d666025
languageName: node
linkType: hard
@@ -3569,11 +3569,11 @@ __metadata:
linkType: hard
"@types/node@npm:*, @types/node@npm:^22.9.0":
version: 22.13.14
resolution: "@types/node@npm:22.13.14"
version: 22.13.11
resolution: "@types/node@npm:22.13.11"
dependencies:
undici-types: "npm:~6.20.0"
checksum: 10c0/fa2ab5b8277bfbcc86c42e46a3ea9871b0d559894cc9d955685d17178c9499f0b1bf03d1d1ea8d92ef2dda818988f4035acb8abf9dc15423a998fa56173ab804
checksum: 10c0/f6ee33d36372242535c38640fe7550a6640d8a775ec19b55bfc11775b521cba072d892ca92a912332ce01b317293d645c1bf767f3f882ec719f2404a3d2a5b96
languageName: node
linkType: hard
@@ -3622,12 +3622,12 @@ __metadata:
linkType: hard
"@types/react@npm:^18.3.12":
version: 18.3.20
resolution: "@types/react@npm:18.3.20"
version: 18.3.19
resolution: "@types/react@npm:18.3.19"
dependencies:
"@types/prop-types": "npm:*"
csstype: "npm:^3.0.2"
checksum: 10c0/65fa867c91357e4c4c646945c8b99044360f8973cb7f928ec4de115fe3207827985d45be236e6fd6c092b09f631c2126ce835c137be30718419e143d73300d8f
checksum: 10c0/236bfe0c4748ada1a640f13573eca3e0fc7c9d847b442947adb352b0718d6d285357fd84c33336c8ffb8cbfabc0d58a43a647c7fd79857fecd61fb58ab6f7918
languageName: node
linkType: hard
@@ -3863,7 +3863,7 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/parser@npm:8.28.0, @typescript-eslint/parser@npm:^8.13.0":
"@typescript-eslint/parser@npm:8.28.0":
version: 8.28.0
resolution: "@typescript-eslint/parser@npm:8.28.0"
dependencies:
@@ -3896,6 +3896,22 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/parser@npm:^8.13.0":
version: 8.27.0
resolution: "@typescript-eslint/parser@npm:8.27.0"
dependencies:
"@typescript-eslint/scope-manager": "npm:8.27.0"
"@typescript-eslint/types": "npm:8.27.0"
"@typescript-eslint/typescript-estree": "npm:8.27.0"
"@typescript-eslint/visitor-keys": "npm:8.27.0"
debug: "npm:^4.3.4"
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.9.0"
checksum: 10c0/2ada98167ca5a474544fada7658d7c8d54ea4dfdd692e3d30d18b5531e50d7308a5b09d23dca651f9fe841f96075ccd18643431f4b61d0e4e7e7ccde888258e8
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:4.33.0":
version: 4.33.0
resolution: "@typescript-eslint/scope-manager@npm:4.33.0"
@@ -3916,6 +3932,16 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:8.27.0":
version: 8.27.0
resolution: "@typescript-eslint/scope-manager@npm:8.27.0"
dependencies:
"@typescript-eslint/types": "npm:8.27.0"
"@typescript-eslint/visitor-keys": "npm:8.27.0"
checksum: 10c0/d87daeffb81f4e70f168c38f01c667713bda71c4545e28fcdf0792378fb3df171894ef77854c5c1a5e5a22c784ee1ccea2dd856b5baf825840710a6a74c14ac9
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:8.28.0":
version: 8.28.0
resolution: "@typescript-eslint/scope-manager@npm:8.28.0"
@@ -3979,6 +4005,13 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/types@npm:8.27.0":
version: 8.27.0
resolution: "@typescript-eslint/types@npm:8.27.0"
checksum: 10c0/9c5f2ba816a9baea5982feeadebe4d19f4df77ddb025a7b2307f9e1e6914076b63cbad81f7f915814e64b4d915052cf27bd79ce3e5a831340cb5ab244133941b
languageName: node
linkType: hard
"@typescript-eslint/types@npm:8.28.0":
version: 8.28.0
resolution: "@typescript-eslint/types@npm:8.28.0"
@@ -4042,6 +4075,24 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:8.27.0":
version: 8.27.0
resolution: "@typescript-eslint/typescript-estree@npm:8.27.0"
dependencies:
"@typescript-eslint/types": "npm:8.27.0"
"@typescript-eslint/visitor-keys": "npm:8.27.0"
debug: "npm:^4.3.4"
fast-glob: "npm:^3.3.2"
is-glob: "npm:^4.0.3"
minimatch: "npm:^9.0.4"
semver: "npm:^7.6.0"
ts-api-utils: "npm:^2.0.1"
peerDependencies:
typescript: ">=4.8.4 <5.9.0"
checksum: 10c0/c04d602825ff2a7b2a89746a68b32f7052fb4ce3d2355d1f4e6f43fd064f17c3b44fb974c98838a078fdebdc35152d2ab0af34663dfca99db7a790bd3fc5d8ac
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:8.28.0":
version: 8.28.0
resolution: "@typescript-eslint/typescript-estree@npm:8.28.0"
@@ -4074,7 +4125,7 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:8.28.0, @typescript-eslint/utils@npm:^8.13.0":
"@typescript-eslint/utils@npm:8.28.0":
version: 8.28.0
resolution: "@typescript-eslint/utils@npm:8.28.0"
dependencies:
@@ -4089,6 +4140,21 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:^8.13.0":
version: 8.27.0
resolution: "@typescript-eslint/utils@npm:8.27.0"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.4.0"
"@typescript-eslint/scope-manager": "npm:8.27.0"
"@typescript-eslint/types": "npm:8.27.0"
"@typescript-eslint/typescript-estree": "npm:8.27.0"
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.9.0"
checksum: 10c0/dcfd5f2c17f1a33061e3ec70d0946ff23a4238aabacae3d85087165beccedf84fb8506d30848f2470e3b60ab98b230aef79c6e8b4c5d39648a37ac559ac5b1e0
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:3.10.1":
version: 3.10.1
resolution: "@typescript-eslint/visitor-keys@npm:3.10.1"
@@ -4118,6 +4184,16 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:8.27.0":
version: 8.27.0
resolution: "@typescript-eslint/visitor-keys@npm:8.27.0"
dependencies:
"@typescript-eslint/types": "npm:8.27.0"
eslint-visitor-keys: "npm:^4.2.0"
checksum: 10c0/d86fd4032db07123816aab3a6b8b53f840387385ab2a4d8f96b22fc76b5438fb27ac8dc42b63caf23f3d265c33e9075dbf1ce8d31f939df12f5cd077d3b10295
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:8.28.0":
version: 8.28.0
resolution: "@typescript-eslint/visitor-keys@npm:8.28.0"
@@ -5058,16 +5134,17 @@ __metadata:
linkType: hard
"array.prototype.findlastindex@npm:^1.2.5":
version: 1.2.5
resolution: "array.prototype.findlastindex@npm:1.2.5"
version: 1.2.6
resolution: "array.prototype.findlastindex@npm:1.2.6"
dependencies:
call-bind: "npm:^1.0.7"
call-bind: "npm:^1.0.8"
call-bound: "npm:^1.0.4"
define-properties: "npm:^1.2.1"
es-abstract: "npm:^1.23.2"
es-abstract: "npm:^1.23.9"
es-errors: "npm:^1.3.0"
es-object-atoms: "npm:^1.0.0"
es-shim-unscopables: "npm:^1.0.2"
checksum: 10c0/962189487728b034f3134802b421b5f39e42ee2356d13b42d2ddb0e52057ffdcc170b9524867f4f0611a6f638f4c19b31e14606e8bcbda67799e26685b195aa3
es-object-atoms: "npm:^1.1.1"
es-shim-unscopables: "npm:^1.1.0"
checksum: 10c0/82559310d2e57ec5f8fc53d7df420e3abf0ba497935de0a5570586035478ba7d07618cb18e2d4ada2da514c8fb98a034aaf5c06caa0a57e2f7f4c4adedef5956
languageName: node
linkType: hard
@@ -5096,17 +5173,18 @@ __metadata:
linkType: hard
"array.prototype.reduce@npm:^1.0.6":
version: 1.0.7
resolution: "array.prototype.reduce@npm:1.0.7"
version: 1.0.8
resolution: "array.prototype.reduce@npm:1.0.8"
dependencies:
call-bind: "npm:^1.0.7"
call-bind: "npm:^1.0.8"
call-bound: "npm:^1.0.4"
define-properties: "npm:^1.2.1"
es-abstract: "npm:^1.23.2"
es-abstract: "npm:^1.23.9"
es-array-method-boxes-properly: "npm:^1.0.0"
es-errors: "npm:^1.3.0"
es-object-atoms: "npm:^1.0.0"
is-string: "npm:^1.0.7"
checksum: 10c0/97aac907d7b15088d5b991bad79de96f95ea0d47a701a034e2dc816e0aabaed2fb401d7fe65ab6fda05eafa58319aa2d1bac404f515e162b81b3b61a51224db2
es-object-atoms: "npm:^1.1.1"
is-string: "npm:^1.1.1"
checksum: 10c0/0a4635f468e9161f51c4a87f80057b8b3c27b0ccc3e40ad7ea77cd1e147f1119f46977b0452f3fa325f543126200f2caf8c1390bd5303edf90d9c1dcd7d5a8a0
languageName: node
linkType: hard
@@ -5296,13 +5374,13 @@ __metadata:
linkType: hard
"axios@npm:^1.7.7":
version: 1.8.2
resolution: "axios@npm:1.8.2"
version: 1.8.4
resolution: "axios@npm:1.8.4"
dependencies:
follow-redirects: "npm:^1.15.6"
form-data: "npm:^4.0.0"
proxy-from-env: "npm:^1.1.0"
checksum: 10c0/d8c2969e4642dc6d39555ac58effe06c051ba7aac2bd40cad7a9011c019fb2f16ee011c5a6906cb25b8a4f87258c359314eb981f852e60ad445ecaeb793c7aa2
checksum: 10c0/450993c2ba975ffccaf0d480b68839a3b2435a5469a71fa2fb0b8a55cdb2c2ae47e609360b9c1e2b2534b73dfd69e2733a1cf9f8215bee0bcd729b72f801b0ce
languageName: node
linkType: hard
@@ -5447,15 +5525,15 @@ __metadata:
linkType: hard
"babel-plugin-polyfill-corejs2@npm:^0.4.10":
version: 0.4.12
resolution: "babel-plugin-polyfill-corejs2@npm:0.4.12"
version: 0.4.13
resolution: "babel-plugin-polyfill-corejs2@npm:0.4.13"
dependencies:
"@babel/compat-data": "npm:^7.22.6"
"@babel/helper-define-polyfill-provider": "npm:^0.6.3"
"@babel/helper-define-polyfill-provider": "npm:^0.6.4"
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
checksum: 10c0/49150c310de2d472ecb95bd892bca1aa833cf5e84bbb76e3e95cf9ff2c6c8c3b3783dd19d70ba50ff6235eb8ce1fa1c0affe491273c95a1ef6a2923f4d5a3819
checksum: 10c0/b4a54561606d388e6f9499f39f03171af4be7f9ce2355e737135e40afa7086cf6790fdd706c2e59f488c8fa1f76123d28783708e07ddc84647dca8ed8fb98e06
languageName: node
linkType: hard
@@ -5472,13 +5550,13 @@ __metadata:
linkType: hard
"babel-plugin-polyfill-regenerator@npm:^0.6.1":
version: 0.6.3
resolution: "babel-plugin-polyfill-regenerator@npm:0.6.3"
version: 0.6.4
resolution: "babel-plugin-polyfill-regenerator@npm:0.6.4"
dependencies:
"@babel/helper-define-polyfill-provider": "npm:^0.6.3"
"@babel/helper-define-polyfill-provider": "npm:^0.6.4"
peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
checksum: 10c0/40164432e058e4b5c6d56feecacdad22692ae0534bd80c92d5399ed9e1a6a2b6797c8fda837995daddd4ca391f9aa2d58c74ad465164922e0f73631eaf9c4f76
checksum: 10c0/ebaaf9e4e53201c02f496d3f686d815e94177b3e55b35f11223b99c60d197a29f907a2e87bbcccced8b7aff22a807fccc1adaf04722864a8e1862c8845ab830a
languageName: node
linkType: hard
@@ -6194,9 +6272,9 @@ __metadata:
linkType: hard
"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001125, caniuse-lite@npm:^1.0.30001688":
version: 1.0.30001707
resolution: "caniuse-lite@npm:1.0.30001707"
checksum: 10c0/a1beaf84bad4f6617bbc5616d6bc0c9cab73e73f7e9e09b6466af5195b1bc393e0f6f19643d7a1c88bd3f4bfa122d7bea81cf6225ec3ade57d5b1dd3478c1a1b
version: 1.0.30001706
resolution: "caniuse-lite@npm:1.0.30001706"
checksum: 10c0/b502d0a509611fd5b009e1123d482e983696984b6b749c3f485fd8d02cc58376c59cf0bb15f22fa2d337da104970edd27dd525d4663cebc728e26ac4adedff0d
languageName: node
linkType: hard
@@ -8020,9 +8098,9 @@ __metadata:
linkType: hard
"electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.5.73":
version: 1.5.127
resolution: "electron-to-chromium@npm:1.5.127"
checksum: 10c0/e8525538ed5c90d25e53b901fc404241b406b724150a5439dec89be569b5ccfab7d6f8e482370ec9f94aa07717094ef354833aabf08fef097b5d49d656e2cfa2
version: 1.5.123
resolution: "electron-to-chromium@npm:1.5.123"
checksum: 10c0/ffaa65e9337f5ba0b51d5709795c3d1074e0cae8efda24116561feed6cedd281f523be50339d991c2fc65344e66e65e7308a157ff87047a8bb4e8008412e9eb1
languageName: node
linkType: hard
@@ -8344,7 +8422,7 @@ __metadata:
languageName: node
linkType: hard
"es-shim-unscopables@npm:^1.0.2":
"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0":
version: 1.1.0
resolution: "es-shim-unscopables@npm:1.1.0"
dependencies:
@@ -9645,13 +9723,13 @@ __metadata:
linkType: hard
"find-my-way@npm:^9.0.0":
version: 9.2.0
resolution: "find-my-way@npm:9.2.0"
version: 9.3.0
resolution: "find-my-way@npm:9.3.0"
dependencies:
fast-deep-equal: "npm:^3.1.3"
fast-querystring: "npm:^1.0.0"
safe-regex2: "npm:^4.0.0"
checksum: 10c0/de869f044ea196493d3d8951e592e8155191cfa7ff56b49ae0aa3b7184e25a19e6931386a0b1ac0ba875648f54430b30c33610045bee0e2d0e5875b9b4fd13fb
safe-regex2: "npm:^5.0.0"
checksum: 10c0/f221bc0c70b2c2a6f9282fd3e0ac1911fcbb68ac718da043ddcefdec3b9d884a54d6ef1bf92e1b2ff83400e50f3c22141206a8ea3308bf0e9e37fd177843425d
languageName: node
linkType: hard
@@ -13767,9 +13845,9 @@ __metadata:
linkType: hard
"mime-db@npm:>= 1.43.0 < 2":
version: 1.53.0
resolution: "mime-db@npm:1.53.0"
checksum: 10c0/1dcc37ba8ed5d1c179f5c6f0837e8db19371d5f2ea3690c3c2f3fa8c3858f976851d3460b172b4dee78ebd606762cbb407aa398545fbacd539e519f858cd7bf4
version: 1.54.0
resolution: "mime-db@npm:1.54.0"
checksum: 10c0/8d907917bc2a90fa2df842cdf5dfeaf509adc15fe0531e07bb2f6ab15992416479015828d6a74200041c492e42cce3ebf78e5ce714388a0a538ea9c53eece284
languageName: node
linkType: hard
@@ -14061,7 +14139,7 @@ __metadata:
languageName: node
linkType: hard
"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3, mkdirp@npm:^0.5.6, mkdirp@npm:~0.5.1":
"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3, mkdirp@npm:~0.5.1":
version: 0.5.6
resolution: "mkdirp@npm:0.5.6"
dependencies:
@@ -14154,11 +14232,11 @@ __metadata:
linkType: hard
"nanoid@npm:^3.3.8":
version: 3.3.9
resolution: "nanoid@npm:3.3.9"
version: 3.3.11
resolution: "nanoid@npm:3.3.11"
bin:
nanoid: bin/nanoid.cjs
checksum: 10c0/4515abe53db7b150cf77074558efc20d8e916d6910d557b5ce72e8bbf6f8e7554d3d7a0d180bfa65e5d8e99aa51b207aa8a3bf5f3b56233897b146d592e30b24
checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b
languageName: node
linkType: hard
@@ -14513,9 +14591,9 @@ __metadata:
linkType: hard
"nwsapi@npm:^2.2.0, nwsapi@npm:^2.2.12, nwsapi@npm:^2.2.2":
version: 2.2.18
resolution: "nwsapi@npm:2.2.18"
checksum: 10c0/fb64761f02d838a1964ef3f15f324779ae5b735c878843ed6592b07d85652928f8f34458605fee0ff379514bf5ffa5afeef5dc8290bfb0959a854069e2af300b
version: 2.2.19
resolution: "nwsapi@npm:2.2.19"
checksum: 10c0/5bd9da260b2b24a775103c835a93c79584a870307eb59270b43c6970b7ae9c0af3cfffd9df5292c24d2ca2c67f49672b4c9be9824c347d6083b90e002a12779a
languageName: node
linkType: hard
@@ -14585,13 +14663,14 @@ __metadata:
linkType: hard
"object.entries@npm:^1.1.0, object.entries@npm:^1.1.8":
version: 1.1.8
resolution: "object.entries@npm:1.1.8"
version: 1.1.9
resolution: "object.entries@npm:1.1.9"
dependencies:
call-bind: "npm:^1.0.7"
call-bind: "npm:^1.0.8"
call-bound: "npm:^1.0.4"
define-properties: "npm:^1.2.1"
es-object-atoms: "npm:^1.0.0"
checksum: 10c0/db9ea979d2956a3bc26c262da4a4d212d36f374652cc4c13efdd069c1a519c16571c137e2893d1c46e1cb0e15c88fd6419eaf410c945f329f09835487d7e65d3
es-object-atoms: "npm:^1.1.1"
checksum: 10c0/d4b8c1e586650407da03370845f029aa14076caca4e4d4afadbc69cfb5b78035fd3ee7be417141abdb0258fa142e59b11923b4c44d8b1255b28f5ffcc50da7db
languageName: node
linkType: hard
@@ -15272,13 +15351,12 @@ __metadata:
linkType: hard
"portfinder@npm:^1.0.26":
version: 1.0.34
resolution: "portfinder@npm:1.0.34"
version: 1.0.35
resolution: "portfinder@npm:1.0.35"
dependencies:
async: "npm:^3.2.6"
debug: "npm:^4.3.6"
mkdirp: "npm:^0.5.6"
checksum: 10c0/1ca7ea711b4c3ab6fe06d32a5b0099401105a8003741bdfde2be727e3bd039887264c52b4ceb8278510cc2d4a57124c03fbe95e67614cbfbdc05cee9a495e513
checksum: 10c0/bdc3653bf7f8e6f83464812fba8cb26abdb1a7d3d4977199f6edd857a1697c829d5ac4342b626590619efbbddc9916a1847145812d32bb0d2457ee6e895f9082
languageName: node
linkType: hard
@@ -17492,12 +17570,12 @@ __metadata:
languageName: node
linkType: hard
"safe-regex2@npm:^4.0.0":
version: 4.0.1
resolution: "safe-regex2@npm:4.0.1"
"safe-regex2@npm:^5.0.0":
version: 5.0.0
resolution: "safe-regex2@npm:5.0.0"
dependencies:
ret: "npm:~0.5.0"
checksum: 10c0/fe6edc2c0fa9847b572d0f0fc2b1f487c36ae603fec65445ae38cfb40483afa85107d3b6ffe63cbe029fd06e6ccb5c5730415c1595a1011fa00bafa2b866a8f0
checksum: 10c0/83d5b1b60a5a97cb71a6e615518ec4a47761b3600aba389089be59a417498185250db2368080afc2f5e91237d68809c6c634b97a2e1cc8bd56a4c7eef2eeb6cf
languageName: node
linkType: hard
@@ -17602,8 +17680,8 @@ __metadata:
linkType: hard
"sass@npm:^1.80.6":
version: 1.85.1
resolution: "sass@npm:1.85.1"
version: 1.86.0
resolution: "sass@npm:1.86.0"
dependencies:
"@parcel/watcher": "npm:^2.4.1"
chokidar: "npm:^4.0.0"
@@ -17614,7 +17692,7 @@ __metadata:
optional: true
bin:
sass: sass.js
checksum: 10c0/f843aa1df1dca2f0e9cb2fb247e4939fd514ae4c182cdd1900a0622c0d71b40dfb1c4225f78b78e165a318287ca137ec597695db3e496408bd16a921a2bc2b3f
checksum: 10c0/921caea1fd8a450d4a986e5570ce13c4ca7b2a57da390811add3d2087ad8f46f53b34652ddcb237d8bdaad49c560b8d6eee130c733c787d058bc5a71a914c139
languageName: node
linkType: hard
@@ -19228,17 +19306,17 @@ __metadata:
react: "npm:^18.3.1"
react-dom: "npm:^18.3.1"
tgui: "workspace:*"
tgui-core: "npm:^1.8.2"
tgui-core: "npm:^1.8.4"
languageName: unknown
linkType: soft
"tgui-core@npm:^1.8.2":
version: 1.8.2
resolution: "tgui-core@npm:1.8.2"
"tgui-core@npm:^1.8.4":
version: 1.8.4
resolution: "tgui-core@npm:1.8.4"
peerDependencies:
react: ^18.2.0
react-dom: ^18.2.0
checksum: 10c0/05859f1affcf2cc08eec5b9227446e165ebdd7d7e6568845b9e0577ee91e166c8b5452bababe675ff031c0ba29f2f25d598258c90ee1d31ead8b1f474cbb6e22
checksum: 10c0/90ab01ef064688a76cbb7179935ddba87c734df7da8c0ef3bc897d55d15b2b0d71486b07dedf93281d1abbab05e04cfa0e69f2bfa7f054c6a16913d9acea433c
languageName: node
linkType: hard
@@ -19266,7 +19344,7 @@ __metadata:
react: "npm:^18.3.1"
react-dom: "npm:^18.3.1"
tgui: "workspace:*"
tgui-core: "npm:^1.8.2"
tgui-core: "npm:^1.8.4"
tgui-dev-server: "workspace:*"
tgui-polyfill: "workspace:*"
languageName: unknown
@@ -19293,7 +19371,7 @@ __metadata:
react: "npm:^18.3.1"
react-dom: "npm:^18.3.1"
tgui: "workspace:*"
tgui-core: "npm:^1.8.2"
tgui-core: "npm:^1.8.4"
tgui-polyfill: "workspace:*"
languageName: unknown
linkType: soft
@@ -19334,7 +19412,7 @@ __metadata:
sass-loader: "npm:^16.0.3"
style-loader: "npm:^4.0.0"
swc-loader: "npm:^0.2.6"
tgui-core: "npm:^1.8.2"
tgui-core: "npm:^1.8.4"
typescript: "npm:5.6.3"
typescript-eslint: "npm:^8.28.0"
url-loader: "npm:^4.1.1"
@@ -19363,7 +19441,7 @@ __metadata:
react: "npm:^18.3.1"
react-dom: "npm:^18.3.1"
react-popper: "npm:^2.3.0"
tgui-core: "npm:^1.8.2"
tgui-core: "npm:^1.8.4"
tgui-dev-server: "workspace:*"
tgui-polyfill: "workspace:*"
languageName: unknown
@@ -19428,21 +19506,21 @@ __metadata:
languageName: node
linkType: hard
"tldts-core@npm:^6.1.84":
version: 6.1.84
resolution: "tldts-core@npm:6.1.84"
checksum: 10c0/e64b2f1d13788dc67a8c9f61e1d227b20e83328565a1eb8aeb704d991dc9ae1a0b48665260a78927ba7809793e000bb3071a21a9686d9a02a9be17f8a527e6bb
"tldts-core@npm:^6.1.85":
version: 6.1.85
resolution: "tldts-core@npm:6.1.85"
checksum: 10c0/f028759b361bef86d3dd8dbaaa010b4c3aca236ec7ba097658b9a595243bb34c98206e410cc3631055af6ed34012f5da7e9af2c4e38e218d5fc693df6ab3da33
languageName: node
linkType: hard
"tldts@npm:^6.1.32":
version: 6.1.84
resolution: "tldts@npm:6.1.84"
version: 6.1.85
resolution: "tldts@npm:6.1.85"
dependencies:
tldts-core: "npm:^6.1.84"
tldts-core: "npm:^6.1.85"
bin:
tldts: bin/cli.js
checksum: 10c0/84c865197ff8eb83283e1c1b7bc45a7e7ff9a41922dad0348c586791df63d6605a5a8e8efb6d4962b63459b2f3c0096d683041f65e29b468ccaf53fe99d9a9e0
checksum: 10c0/83bc222046f36a9ca071b662e3272bb1e98e849fa4bddfab0a3eba8804a4a539b02bcbe55e1277fe713de6677e55104da2ef9a54d006c642b6e9f26c7595d5aa
languageName: node
linkType: hard
@@ -19560,12 +19638,12 @@ __metadata:
languageName: node
linkType: hard
"tr46@npm:^5.0.0":
version: 5.0.0
resolution: "tr46@npm:5.0.0"
"tr46@npm:^5.1.0":
version: 5.1.0
resolution: "tr46@npm:5.1.0"
dependencies:
punycode: "npm:^2.3.1"
checksum: 10c0/1521b6e7bbc8adc825c4561480f9fe48eb2276c81335eed9fa610aa4c44a48a3221f78b10e5f18b875769eb3413e30efbf209ed556a17a42aa8d690df44b7bee
checksum: 10c0/d761f7144e0cb296187674ef245c74f761e334d7cf25ca73ef60e4c72c097c75051031c093fa1a2fee04b904977b316716a7915854bcae8fb1a371746513cbe8
languageName: node
linkType: hard
@@ -19586,11 +19664,11 @@ __metadata:
linkType: hard
"ts-api-utils@npm:^2.0.1":
version: 2.0.1
resolution: "ts-api-utils@npm:2.0.1"
version: 2.1.0
resolution: "ts-api-utils@npm:2.1.0"
peerDependencies:
typescript: ">=4.8.4"
checksum: 10c0/23fd56a958b332cac00150a652e4c84730df30571bd2faa1ba6d7b511356d1a61656621492bb6c7f15dd6e18847a1408357a0e406671d358115369a17f5bfedd
checksum: 10c0/9806a38adea2db0f6aa217ccc6bc9c391ddba338a9fe3080676d0d50ed806d305bb90e8cef0276e793d28c8a929f400abb184ddd7ff83a416959c0f4d2ce754f
languageName: node
linkType: hard
@@ -20784,12 +20862,12 @@ __metadata:
linkType: hard
"whatwg-url@npm:^14.0.0":
version: 14.1.1
resolution: "whatwg-url@npm:14.1.1"
version: 14.2.0
resolution: "whatwg-url@npm:14.2.0"
dependencies:
tr46: "npm:^5.0.0"
tr46: "npm:^5.1.0"
webidl-conversions: "npm:^7.0.0"
checksum: 10c0/de1e9cc2f04cb000f232c839d4999384ba41b680ef8a89e7c61c9bc40354ba8593c775d068faaf0819f5866e4d6ca3e7b9b386e2123aa475bfd33da02316f476
checksum: 10c0/f746fc2f4c906607d09537de1227b13f9494c171141e5427ed7d2c0dd0b6a48b43d8e71abaae57d368d0c06b673fd8ec63550b32ad5ed64990c7b0266c2b4272
languageName: node
linkType: hard