').css("color","var(--red-ui-text-color-error)").text(msg).appendTo(sessionMessages);
+ });
+ delete RED.sessionMessages;
+ }
var row = $("
",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields");
var loginButton = $('
',{style: "padding: 10px"}).appendTo(row).on("click", function() {
@@ -152,7 +170,7 @@ RED.user = (function() {
});
}
- var loginImageSrc = data.image || "red/images/node-red-256.png";
+ var loginImageSrc = data.image || "red/images/node-red-256.svg";
$("#node-dialog-login-image").load(function() {
dialog.dialog("open");
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/colors.scss b/packages/node_modules/@node-red/editor-client/src/sass/colors.scss
index 4b7301542..930b2d2d4 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/colors.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/colors.scss
@@ -140,8 +140,8 @@ $workspace-button-color-focus-outline: $form-input-focus-color;
$shade-color: rgba(160,160,160,0.5);
-
$popover-background: #333;
+$popover-border: $popover-background;
$popover-color: #eee;
$popover-button-border-color: #bbb;
$popover-button-border-color-hover: #666;
@@ -295,6 +295,9 @@ $group-default-stroke: #999;
$group-default-stroke-opacity: 1;
$group-default-label-color: #a4a4a4;
+$tourGuide-border: #c56c6c;
+$tourGuide-heading-color: #c56c6c;
+
// Deprecated
$text-color-green: $text-color-success;
$info-text-code-color: $text-color-code;
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/debug.scss b/packages/node_modules/@node-red/editor-client/src/sass/debug.scss
index 1e77e46e1..1cdf15e55 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/debug.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/debug.scss
@@ -43,12 +43,24 @@
border-bottom: 1px solid $secondary-border-color;
box-shadow: 0 2px 6px $shadow;
}
-.red-ui-debug-filter-row {
- .red-ui-nodeList {
- margin: 10px 0;
+#red-ui-sidebar-debug-filter-node-list-row {
+ .red-ui-treeList-label.disabled {
+ font-style: italic;
+ color: $secondary-text-color-disabled;
+ }
+
+ .red-ui-treeList-label {
+ &.selected, &.selected .red-ui-treeList-sublabel-text {
+ background: inherit;
+ }
+ &.selected, &.selected .red-ui-treeList-sublabel-text {
+ background: inherit;
+ }
+ &.focus, &.focus .red-ui-treeList-sublabel-text {
+ background: $list-item-background-hover !important;
+ }
}
}
-
.red-ui-debug-msg {
position: relative;
border-bottom: 1px solid $debug-message-border;
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/dropdownMenu.scss b/packages/node_modules/@node-red/editor-client/src/sass/dropdownMenu.scss
index bb91846bb..98ab3bd3b 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/dropdownMenu.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/dropdownMenu.scss
@@ -19,7 +19,7 @@
font-size: $primary-font-size;
position: absolute;
top: 100%;
- width: 200px;
+ width: 230px;
left: 0;
z-index: 1000;
display: none;
@@ -46,7 +46,7 @@
& > li > a,
& > li > a:focus {
display: block;
- padding: 4px 0 4px 32px;
+ padding: 4px 12px 4px 32px;
clear: both;
font-weight: normal;
line-height: 20px;
@@ -68,6 +68,10 @@
& > .disabled > a:hover,
& > .disabled > a:focus {
color: $menuDisabledColor;
+ .red-ui-popover-key {
+ color: $menuDisabledColor;
+ border-color: $menuDisabledColor;
+ }
}
& > .disabled > a:hover,
@@ -83,6 +87,7 @@
max-width: 14px;
}
.fa {
+ float: left;
width: 20px;
margin-left: -25px;
margin-top: 3px;
@@ -102,6 +107,20 @@
display: none;
}
}
+ .red-ui-menu-label {
+ display: flex;
+ & > :first-child {
+ flex-grow: 1
+ }
+ }
+ .red-ui-popover-key {
+ border: none;
+ padding: 0;
+ font-size: 13px;
+ // float: right;
+ color: $menuColor;
+ border-color: $menuColor;
+ }
}
}
@@ -113,6 +132,7 @@
.red-ui-menu-dropdown > li > a:hover,
+.red-ui-menu-dropdown > li.open > a,
.red-ui-menu-dropdown > li > a:focus,
.red-ui-menu-dropdown-submenu:hover > a,
.red-ui-menu-dropdown-submenu:focus > a {
@@ -129,6 +149,7 @@
margin-top: -6px;
margin-left: -1px;
}
+ &.open > .red-ui-menu-dropdown,
&:hover > .red-ui-menu-dropdown {
display: block;
}
@@ -209,4 +230,4 @@ ul.red-ui-menu:not(.red-ui-menu-dropdown) {
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/header.scss b/packages/node_modules/@node-red/editor-client/src/sass/header.scss
index 4093e9bca..bd1e78a81 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/header.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/header.scss
@@ -191,14 +191,17 @@
margin-top: 0;
li a {
color: $header-menu-color;
- padding: 3px 40px;
+ padding: 3px 10px 3px 40px;
img {
max-width: 100%;
margin-right: 10px;
padding: 4px;
border: 3px solid transparent;
}
-
+ .red-ui-popover-key {
+ color: $header-menu-color-disabled !important;
+ border-color: $header-menu-color-disabled !important;
+ }
&.active img {
border: 3px solid $header-menu-item-border-active;
}
@@ -211,7 +214,6 @@
}
span.red-ui-menu-label {
font-size: 14px;
- display: inline-block;
text-indent: 0px;
}
span.red-ui-menu-sublabel {
@@ -222,6 +224,7 @@
}
}
> li > a:hover,
+ > li.open > a,
> li > a:focus,
> li:hover > a,
> li:focus > a {
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/jquery.scss b/packages/node_modules/@node-red/editor-client/src/sass/jquery.scss
index b5b96162d..406d10258 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/jquery.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/jquery.scss
@@ -137,10 +137,10 @@
padding: 0;
border: 1px solid $form-input-border-color;
}
-.ui-spinner input {
+.ui-spinner input[type=text] {
background: $form-input-background;
margin: 0 17px 0 0;
- padding: 6px;
+ padding: 8px;
border: none;
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/popover.scss b/packages/node_modules/@node-red/editor-client/src/sass/popover.scss
index 872f32024..e6def9efc 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/popover.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/popover.scss
@@ -19,19 +19,23 @@
display: none;
position: absolute;
width: auto;
- padding: 10px;
+ padding: 2px;
height: auto;
- background: $popover-background;
- color: $popover-color;
+ background: var(--red-ui-popover-border);
+ color: var(--red-ui-popover-color);
border-radius: 4px;
z-index: 1000;
font-family: $primary-font;
font-size: 14px;
line-height: 1.4em;
@include component-shadow;
- border-color: $popover-background;
+ border-color: var(--red-ui-popover-border);
+}
+.red-ui-popover-content {
+ padding: 8px;
+ border-radius: 2px;
+ background: var(--red-ui-popover-background);
}
-
.red-ui-popover:after, .red-ui-popover:before {
border: solid transparent;
content: " ";
@@ -61,26 +65,26 @@
.red-ui-popover.red-ui-popover-right:after {
border-color: transparent;
- border-right-color: $popover-background;
+ border-right-color: var(--red-ui-popover-border);
border-width: 10px;
margin-top: -10px;
}
.red-ui-popover.red-ui-popover-right:before {
border-color: transparent;
- border-right-color: $popover-background;
+ border-right-color: var(--red-ui-popover-border);
border-width: 11px;
margin-top: -11px;
}
.red-ui-popover.red-ui-popover-left:after {
border-color: transparent;
- border-left-color: $popover-background;
+ border-left-color: var(--red-ui-popover-border);
border-width: 10px;
margin-top: -10px;
}
.red-ui-popover.red-ui-popover-left:before {
border-color: transparent;
- border-left-color: $popover-background;
+ border-left-color: var(--red-ui-popover-border);
border-width: 11px;
margin-top: -11px;
}
@@ -88,26 +92,26 @@
.red-ui-popover.red-ui-popover-bottom:after {
border-color: transparent;
- border-bottom-color: $popover-background;
+ border-bottom-color: var(--red-ui-popover-border);
border-width: 10px;
margin-left: -10px;
}
.red-ui-popover.red-ui-popover-bottom:before {
border-color: transparent;
- border-bottom-color: $popover-background;
+ border-bottom-color: var(--red-ui-popover-border);
border-width: 11px;
margin-left: -11px;
}
.red-ui-popover.red-ui-popover-top:after {
border-color: transparent;
- border-top-color: $popover-background;
+ border-top-color: var(--red-ui-popover-border);
border-width: 10px;
margin-left: -10px;
}
.red-ui-popover.red-ui-popover-top:before {
border-color: transparent;
- border-top-color: $popover-background;
+ border-top-color: var(--red-ui-popover-border);
border-width: 11px;
margin-left: -11px;
}
@@ -116,9 +120,10 @@
.red-ui-popover-size-small {
font-size: 12px;
- padding: 5px 7px;
line-height: 1.8em;
-
+ .red-ui-popover-content {
+ padding: 1px 4px;
+ }
&.red-ui-popover-right:after, &.red-ui-popover-left:after {
border-width: 7px;
margin-top: -7px;
@@ -143,7 +148,7 @@
font-size: 11px;
font-family: $monospace-font;
margin-left: 3px;
- border: 1px solid $popover-color;
+ border: 1px solid var(--red-ui-popover-color);
border-radius:3px;
padding: 1px 2px;
}
@@ -152,8 +157,8 @@
.red-ui-popover button.red-ui-button {
&:not(.primary) {
border-color: $popover-button-border-color;
- background: $popover-background;
- color: $popover-color !important;
+ background: var(--red-ui-popover-background);
+ color: var(--red-ui-popover-color) !important;
}
&:not(.primary):not(.disabled):not(.ui-button-disabled):hover {
border-color: $popover-button-border-color-hover;
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/projects.scss b/packages/node_modules/@node-red/editor-client/src/sass/projects.scss
index 4c0e503c2..681e7b3f9 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/projects.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/projects.scss
@@ -73,13 +73,13 @@
.red-ui-projects-dialog-screen-start {
.red-ui-projects-dialog-screen-start-hero {
text-align: center;
- font-size: 2em;
+ font-size: 1.4em;
padding: 10px;
- min-height: 60px;
+ min-height: 40px;
color: $primary-text-color;
}
.red-ui-projects-dialog-screen-start-body {
- min-height: 400px;
+ min-height: 300px;
line-height: 1.6em;
p {
font-size: 1.1em;
@@ -92,7 +92,7 @@
}
button.red-ui-button.red-ui-projects-dialog-button {
width: calc(50% - 80px);
- margin: 20px;
+ margin: 10px 20px;
height: auto;
line-height: 2em;
padding: 10px;
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/style.scss b/packages/node_modules/@node-red/editor-client/src/sass/style.scss
index 8901d1305..7910832ad 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/style.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/style.scss
@@ -61,6 +61,7 @@
@import "ui/common/checkboxSet";
@import "ui/common/stack";
@import "ui/common/treeList";
+@import "ui/common/autoComplete";
@import "dragdrop";
@@ -69,3 +70,5 @@
@import "debug";
@import "radialMenu";
+
+@import "tourGuide";
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/tab-info.scss b/packages/node_modules/@node-red/editor-client/src/sass/tab-info.scss
index d4d86cd89..72422f350 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/tab-info.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/tab-info.scss
@@ -16,6 +16,7 @@
.red-ui-sidebar-info {
height: 100%;
+ overflow: hidden;
}
.red-ui-sidebar-info hr {
margin: 10px 0;
@@ -212,6 +213,9 @@ div.red-ui-info-table {
border: none;
}
}
+ p {
+ display: inline;
+ }
}
.red-ui-help-info-header {
i {
@@ -230,7 +234,26 @@ div.red-ui-info-table {
}
}
}
-
+ table {
+ border-collapse: collapse;
+ border: 1px solid var(--red-ui-secondary-border-color);
+ margin : 8px 0 8px 0;
+ min-width : 300px;
+ overflow : hidden;
+ }
+ table thead tr {
+ background-color: var(--red-ui-primary-background); //$primary-text-color;
+ border-bottom: 1px solid var(--red-ui-secondary-border-color);
+ color: var(--red-ui-header-text-color);
+ text-align: left;
+ }
+ table th,
+ table td {
+ padding: 6px 8px;
+ }
+ table tbody tr:nth-of-type(even) {
+ background-color: var(--red-ui-tertiary-background); //$primary-background;
+ }
}
.red-ui-sidebar-info-stack {
height: 100%;
@@ -411,16 +434,19 @@ div.red-ui-info-table {
}
.red-ui-info-outline-item-controls {
position: absolute;
- top:0;
- bottom: 0;
- right: 0px;
- padding: 2px 3px 0 1px;
+ top:1px;
+ bottom: 1px;
+ right: 1px;
+ padding: 1px 2px 0 1px;
text-align: right;
background: $list-item-background;
.red-ui-treeList-label:hover & {
background: $list-item-background-hover;
}
+ .red-ui-treeList-label.focus & {
+ background: $list-item-background-hover;
+ }
.red-ui-treeList-label.selected & {
background: $list-item-background-selected;
}
@@ -435,6 +461,12 @@ div.red-ui-info-table {
border: none;
background: none;
}
+ .fa-circle-thin {
+ display: none;
+ }
+ .fa-eye {
+ display: none;
+ }
}
.red-ui-info-outline-item-control-reveal,
.red-ui-info-outline-item-control-action {
@@ -446,7 +478,17 @@ div.red-ui-info-table {
display: inline-block;
}
}
-
+ .fa-eye-slash {
+ display: none;
+ }
+ .red-ui-info-outline-item.red-ui-info-outline-item-hidden & {
+ .fa-eye-slash {
+ display: inline-block;
+ }
+ .fa-eye {
+ display: none;
+ }
+ }
.fa-ban {
display: none;
}
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/tabs.scss b/packages/node_modules/@node-red/editor-client/src/sass/tabs.scss
index 0b038932a..e83996a5e 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/tabs.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/tabs.scss
@@ -21,6 +21,9 @@
height: 35px;
box-sizing: border-box;
+ .hide-tab {
+ transition: width 0.1s ease-in;
+ }
.red-ui-tabs-scroll-container {
height: 60px;
overflow-x: scroll;
@@ -142,13 +145,18 @@
padding-right: 21px;
}
&.red-ui-tabs-add {
- padding-right: 35px;
+ padding-right: 29px;
}
&.red-ui-tabs-add.red-ui-tabs-scrollable {
- padding-right: 59px;
+ padding-right: 53px;
}
+ &.red-ui-tabs-add.red-ui-tabs-menu.red-ui-tabs-scrollable,
&.red-ui-tabs-add.red-ui-tabs-search.red-ui-tabs-scrollable {
- padding-right: 95px;
+ padding-right: 83px;
+ }
+
+ &.red-ui-tabs-add.red-ui-tabs-search.red-ui-tabs-menu.red-ui-tabs-scrollable {
+ padding-right: 113px;
}
&.red-ui-tabs-collapsible {
@@ -232,13 +240,14 @@
a {
@include workspace-button;
- line-height: 32px;
- height: 32px;
- width: 32px;
+ line-height: 30px;
+ height: 28px;
+ width: 28px;
+ margin-left: 2px;
+ margin-right: 2px;
margin-top: 3px;
- margin-right:3px;
- margin-left:3px;
- border: 1px solid $primary-border-color;
+ margin-bottom: 3px;
+ border: none;
z-index: 2;
}
}
@@ -280,6 +289,8 @@
border-left: none;
border-right: none;
border-top: none;
+ border-bottom: 1px solid $primary-border-color;
+ line-height: 34px;
}
}
.red-ui-tab-scroll-left {
@@ -296,15 +307,30 @@
}
.red-ui-tabs.red-ui-tabs-add .red-ui-tab-scroll-right {
- right: 38px;
+ right: 32px;
}
+.red-ui-tabs.red-ui-tabs-add.red-ui-tabs-menu .red-ui-tab-scroll-right,
.red-ui-tabs.red-ui-tabs-add.red-ui-tabs-search .red-ui-tab-scroll-right {
- right: 76px;
+ right: 64px;
}
+.red-ui-tabs.red-ui-tabs-add.red-ui-tabs-menu .red-ui-tabs-add,
.red-ui-tabs.red-ui-tabs-add.red-ui-tabs-search .red-ui-tabs-add {
- right: 38px;
+ right: 32px;
}
+
+.red-ui-tabs.red-ui-tabs-add.red-ui-tabs-search.red-ui-tabs-menu {
+ .red-ui-tab-scroll-right {
+ right: 96px;
+ }
+ .red-ui-tabs-add {
+ right: 64px;
+ }
+ .red-ui-tabs-search {
+ right: 32px;
+ }
+}
+
.red-ui-tabs-fade {
position: absolute;
bottom: 0;
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/tourGuide.scss b/packages/node_modules/@node-red/editor-client/src/sass/tourGuide.scss
new file mode 100644
index 000000000..e5e87f8da
--- /dev/null
+++ b/packages/node_modules/@node-red/editor-client/src/sass/tourGuide.scss
@@ -0,0 +1,118 @@
+.red-ui-tourGuide-shade {
+ position: absolute;
+ top:0;
+ left:0;
+ bottom:0;
+ right:0;
+ z-index: 2000;
+ overflow: hidden;
+}
+
+.red-ui-tourGuide-shade-focus {
+ display: block;
+ width: 100px;
+ height: 100px;
+ position: absolute;
+ z-index: 2001;
+ transform: translate(-50%, -50%);
+ border-radius: 50%;
+ border: 2px solid var(--red-ui-tourGuide-border);
+
+ &.transition {
+ transition: 0.4s ease;
+ transition-property: width,height;
+ }
+
+ &::before {
+ content: '';
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ border: solid 6000px var(--red-ui-shade-color);
+ margin-left: -6000px;
+ margin-top: -6000px;
+ pointer-events: none;
+ }
+}
+.red-ui-popover.red-ui-tourGuide-popover {
+ z-index: 2003;
+ --red-ui-popover-background: var(--red-ui-secondary-background);
+ --red-ui-popover-border: var(--red-ui-tourGuide-border);
+ --red-ui-popover-color: var(--red-ui-primary-text-color);
+
+ .red-ui-popover-content {
+ h2 {
+ text-align: center;
+ margin-top: 0px;
+ line-height: 1.2em;
+ color: var(--red-ui-tourGuide-heading-color);
+ i.fa {
+ font-size: 1.5em
+ }
+ }
+ }
+
+}
+
+.red-ui-tourGuide-toolbar {
+ min-height: 36px;
+ position: relative;
+ display: flex;
+ align-items: flex-end;
+}
+.red-ui-tourGuide-breadcrumbs {
+ flex-grow: 1;
+
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 6px;
+ & > div {
+ display: inline-block;
+ }
+ i {
+ line-height: 16px;
+ margin: 0 3px;
+ }
+}
+.red-ui-tourGuide-popover-description {
+ padding: 10px 20px 5px;
+}
+.red-ui-tourGuide-popover-full {
+ .red-ui-tourGuide-popover-description {
+ padding: 20px 40px 10px;
+ text-align: center;
+ }
+}
+.red-ui-popover.red-ui-tourGuide-popover button.red-ui-button {
+ &:not(.primary) {
+ background: var(--red-ui-secondary-background);
+ color: var(--red-ui-primary-text-color) !important;
+ }
+ &:not(.primary):not(.disabled):not(.ui-button-disabled):hover {
+ border-color: $popover-button-border-color-hover;
+ }
+}
+
+
+// .red-ui-tourGuide-popover-bounce {
+// animation: 10s ease-in 5s infinite both red-ui-tourGuide-popover-bounce;
+// }
+// // @keyframes *must* be on multiple lines so build-custom-theme can filter them out
+// @keyframes red-ui-tourGuide-popover-bounce {
+// 0%,
+// 10%,
+// 100% {
+// -webkit-transform: translateY(0);
+// transform: translateY(0);
+// }
+// 2%,8% {
+// -webkit-transform: translateY(-5px);
+// transform: translateY(-5px);
+// }
+// 5% {
+// -webkit-transform: translateY(5px);
+// transform: translateY(5px);
+// }
+// }
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/ui/common/autoComplete.scss b/packages/node_modules/@node-red/editor-client/src/sass/ui/common/autoComplete.scss
new file mode 100644
index 000000000..0501bb6a2
--- /dev/null
+++ b/packages/node_modules/@node-red/editor-client/src/sass/ui/common/autoComplete.scss
@@ -0,0 +1,5 @@
+.red-ui-autoComplete-container {
+ &.red-ui-popover-panel {
+ border-top: none;
+ }
+}
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/ui/common/treeList.scss b/packages/node_modules/@node-red/editor-client/src/sass/ui/common/treeList.scss
index a89fe1b84..beba6b047 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/ui/common/treeList.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/ui/common/treeList.scss
@@ -89,18 +89,27 @@
color: $list-item-color;
text-decoration: none;
}
+ &.focus, &.focus .red-ui-treeList-sublabel-text {
+ background: $list-item-background-hover;
+ outline: 1px solid $form-input-focus-color !important;
+ outline-offset: -1px;
+ color: $list-item-color;
+ }
&.selected, &.selected .red-ui-treeList-sublabel-text {
background: $list-item-background-selected;
outline: none;
color: $list-item-color;
}
- input.red-ui-treeList-checkbox {
+ input.red-ui-treeList-checkbox,
+ input.red-ui-treeList-radio {
margin: 0;
}
}
.red-ui-treeList-label-text {
margin-left: 4px;
+ overflow: hidden;
+ text-overflow: ellipsis;
&:empty {
min-height: 20px;
}
@@ -120,6 +129,7 @@
.red-ui-treeList-icon {
display: inline-block;
+ flex-shrink: 0;
width: 20px;
text-align: center;
}
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/ui/common/typedInput.scss b/packages/node_modules/@node-red/editor-client/src/sass/ui/common/typedInput.scss
index 2b12fffea..a084fcff3 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/ui/common/typedInput.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/ui/common/typedInput.scss
@@ -81,7 +81,8 @@
z-index: 2000;
a {
padding: 6px 18px 6px 6px;
- display: block;
+ display: flex;
+ align-items: center;
border-bottom: 1px solid $secondary-border-color;
color: $form-text-color;
&:hover {
@@ -98,7 +99,7 @@
background: $workspace-button-background-active;
}
input[type="checkbox"] {
- margin-right: 6px;
+ margin: 0 6px 0 0;
}
}
.red-ui-typedInput-icon {
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/variables.scss b/packages/node_modules/@node-red/editor-client/src/sass/variables.scss
index 72b573a2e..aadc2231e 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/variables.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/variables.scss
@@ -81,12 +81,18 @@
--red-ui-node-status-changed-border: #{$node-status-changed-border};
--red-ui-node-status-changed-background: #{$node-status-changed-background};
-
-
--red-ui-node-border: #{$node-border};
--red-ui-node-port-background:#{$node-port-background};
--red-ui-node-label-color: #{$node-label-color};
--red-ui-node-selected-color: #{$node-selected-color};
--red-ui-port-selected-color: #{$port-selected-color};
+
+ --red-ui-popover-background: #{$popover-background};
+ --red-ui-popover-border: #{$popover-border};
+ --red-ui-popover-color: #{$popover-color};
+
+ --red-ui-tourGuide-border: #{$tourGuide-border};
+ --red-ui-tourGuide-heading-color: #{$tourGuide-heading-color};
+
}
diff --git a/packages/node_modules/@node-red/editor-client/src/tours/first-flow.js b/packages/node_modules/@node-red/editor-client/src/tours/first-flow.js
new file mode 100644
index 000000000..e7eed1d0f
--- /dev/null
+++ b/packages/node_modules/@node-red/editor-client/src/tours/first-flow.js
@@ -0,0 +1,80 @@
+export default {
+ steps: [
+ {
+ title: "Create your first flow",
+ width: 400,
+ description: 'This tutorial will guide you through creating your first flow',
+ nextButton: 'start'
+ },
+ {
+ element: "#red-ui-workspace .red-ui-tab-button.red-ui-tabs-add",
+ description: 'To add a new tab, click the
button',
+ wait: {
+ type: "dom-event",
+ event: "click",
+ element: "#red-ui-workspace .red-ui-tab-button.red-ui-tabs-add a"
+ },
+ },
+ {
+ element: '.red-ui-palette-node[data-palette-type="inject"]',
+ direction: 'right',
+ description: 'The palette lists all of the nodes available to use. Drag a new Inject node into the workspace.',
+ fallback: 'inset-bottom-right',
+ wait: {
+ type: "nr-event",
+ event: "nodes:add",
+ filter: function(event) {
+ if (event.type === "inject") {
+ this.injectNode = event;
+ return true;
+ }
+ return false
+ }
+ },
+ complete: function() {
+ $('.red-ui-palette-node[data-palette-type="inject"]').css("z-index","auto");
+ }
+ },
+ {
+ element: '.red-ui-palette-node[data-palette-type="debug"]',
+ direction: 'right',
+ description: 'Next, drag a new Debug node into the workspace.',
+ fallback: 'inset-bottom-right',
+ wait: {
+ type: "nr-event",
+ event: "nodes:add",
+ filter: function(event) {
+ if (event.type === "debug") {
+ this.debugNode = event;
+ return true;
+ }
+ return false
+ }
+ },
+ complete: function() {
+ $('.red-ui-palette-node[data-palette-type="debug"]').css("z-index","auto");
+ },
+ },
+ {
+ element: function() { return $("#"+this.injectNode.id+" .red-ui-flow-port") },
+ description: 'Add a wire from the output of the Inject node to the input of the Debug node',
+ fallback: 'inset-bottom-right',
+ wait: {
+ type: "nr-event",
+ event: "links:add",
+ filter: function(event) {
+ return event.source.id === this.injectNode.id && event.target.id === this.debugNode.id;
+ }
+ },
+ },
+ {
+ element: "#red-ui-header-button-deploy",
+ description: 'Deploy your changes so the flow is active in the runtime',
+ width: 200,
+ wait: {
+ type: "dom-event",
+ event: "click"
+ },
+ }
+ ]
+}
diff --git a/packages/node_modules/@node-red/editor-client/src/tours/welcome.js b/packages/node_modules/@node-red/editor-client/src/tours/welcome.js
new file mode 100644
index 000000000..cb1266b89
--- /dev/null
+++ b/packages/node_modules/@node-red/editor-client/src/tours/welcome.js
@@ -0,0 +1,151 @@
+export default {
+ version: "2.1.0",
+ steps: [
+ {
+ titleIcon: "fa fa-map-o",
+ title: { "en-US": "Welcome to Node-RED 2.1!" },
+ description: { "en-US": "Let's take a moment to discover the new features in this release." }
+ },
+ {
+ title: { "en-US": "A new Tour Guide" },
+ description: { "en-US": "
First, as you've already found, we now have this tour of new features. We'll only show the tour the first time you open the editor for each new version of Node-RED.
"+
+ "
You can choose not to see this tour in the future by disabling it under the View tab of User Settings.
" }
+ },
+ {
+ title: { "en-US": "New Edit menu" },
+ prepare() {
+ $("#red-ui-header-button-sidemenu").trigger("click");
+ $("#menu-item-edit-menu").parent().addClass("open")
+ },
+ complete() {
+ $("#menu-item-edit-menu").parent().removeClass("open")
+ },
+ element: "#menu-item-edit-menu-submenu",
+ interactive: false,
+ direction: "left",
+ description: { "en-US": "
The main menu has been updated with a new 'Edit' section. This includes all of the familar options, like cut/paste and undo/redo.
"+
+ "
The menu now displays keyboard shortcuts for the options.
" }
+
+ },
+ {
+ title: { "en-US": "Arranging nodes" },
+ prepare() {
+ $("#red-ui-header-button-sidemenu").trigger("click");
+ $("#menu-item-arrange-menu").parent().addClass("open")
+ },
+ complete() {
+ $("#menu-item-arrange-menu").parent().removeClass("open")
+ },
+ element: "#menu-item-arrange-menu-submenu",
+ interactive: false,
+ direction: "left",
+ description: { "en-US": "
The new 'Arrange' section of the menu provides new options to help arrange your nodes. You can align them to a common edge, spread them out evenly or change their order.
" },
+ },
+ {
+ title: { "en-US": "Hiding tabs" },
+ element: "#red-ui-workspace-tabs > li.active",
+ description: { "en-US": '
Tabs can now be hidden by clicking their icon.
The Info Sidebar will still list all of your tabs, and tell you which ones are currently hidden.' },
+ interactive: false,
+ prepare() {
+ $("#red-ui-workspace-tabs > li.active .red-ui-tab-close").css("display","block");
+ },
+ complete() {
+ $("#red-ui-workspace-tabs > li.active .red-ui-tab-close").css("display","");
+ }
+ },
+ {
+ title: { "en-US": "Tab menu" },
+ element: "#red-ui-workspace-tabs-menu",
+ description: { "en-US": '
The new tab menu also provides lots of new options for your tabs.
' },
+ interactive: false,
+ direction: "left",
+ prepare() {
+ $("#red-ui-workspace > .red-ui-tabs > .red-ui-tabs-menu a").trigger("click");
+ },
+ complete() {
+ $(document).trigger("click");
+ }
+ },
+ {
+ title: { "en-US": "Flow and Group level environment variables" },
+ element: "#red-ui-workspace-tabs > li.active",
+ interactive: false,
+ description: { "en-US": "
Flows and Groups can now have their own environment variables that can be referenced by nodes inside them.
" },
+ },
+ {
+ prepare(done) {
+ RED.editor.editFlow(RED.nodes.workspace(RED.workspaces.active()),"editor-tab-envProperties");
+ setTimeout(done,700);
+ },
+ element: "#red-ui-tab-editor-tab-envProperties-link-button",
+ description: { "en-US": "
Their edit dialogs have a new Environment Variables section.
" },
+ },
+ {
+ element: ".node-input-env-container-row",
+ direction: "left",
+ description: { "en-US": '
The environment variables are listed in this table and new ones can be added by clicking the button.
' },
+ complete(done) {
+ $("#node-dialog-cancel").trigger("click");
+ setTimeout(done,500);
+ }
+ },
+
+ {
+ title: {"en-US":"Link Call node added"},
+ prepare(done) {
+ this.paletteWasClosed = $("#red-ui-main-container").hasClass("red-ui-palette-closed");
+ RED.actions.invoke("core:toggle-palette",true)
+ $('[data-palette-type="link call"]')[0].scrollIntoView({block:"center"})
+ setTimeout(done,100);
+ },
+ element: '[data-palette-type="link call"]',
+ direction: "right",
+ description: { "en-US": '
The Link Call
node lets you call another flow that begins with a Link In
node and get the result back when the message reaches a Link Out
node.
' },
+ },
+ {
+ title: {"en-US":"MQTT nodes support dynamic connections"},
+ prepare(done) {
+ $('[data-palette-type="mqtt out"]')[0].scrollIntoView({block:"center"})
+ setTimeout(done,100);
+ },
+ element: '[data-palette-type="mqtt out"]',
+ direction: "right",
+ description: { "en-US": '
The MQTT
nodes now support creating their connections and subscriptions dynamically.
' },
+ },
+ {
+ title: {"en-US":"File nodes renamed"},
+ prepare(done) {
+ $('[data-palette-type="file"]')[0].scrollIntoView({block:"center"})
+ setTimeout(done,100);
+ },
+ complete() {
+ if (this.paletteWasClosed) {
+ RED.actions.invoke("core:toggle-palette",false)
+ }
+ },
+ element: '[data-palette-type="file"]',
+ direction: "right",
+ description: { "en-US": '
The file nodes have been renamed to make it clearer which node does what.
' },
+ },
+ {
+ title: {"en-US":"Deep copy option on Change node"},
+ prepare(done) {
+ var def = RED.nodes.getType('change')
+ RED.editor.edit({id:"test",type:"change",rules:[{t:'set',p:'payload',pt:'msg', tot:'msg',to:"anotherProperty"}],_def:def, _:def._})
+ setTimeout(done,700);
+ },
+ complete(done) {
+ $("#node-dialog-cancel").trigger("click");
+ setTimeout(done,500);
+ },
+ element: function() {
+ return $(".node-input-rule-property-deepCopy").next()
+ },
+ description: { "en-US": '
The Set rule has a new option to create a deep copy of the value. This ensures a complete copy is made, rather than using a reference.
' },
+ },
+ {
+ title: { "en-US": "And that's not all..." },
+ description: { "en-US": "
There are many more smaller changes, including:
- Auto-complete suggestions in the
msg
TypedInput. - Support for
msg.resetTimeout
in the Join
node. - Pushing messages to the front of the queue in the
Delay
node's rate limiting mode. - An optional second output on the
Delay
node for rate limited messages.
" }
+ }
+ ]
+}
diff --git a/packages/node_modules/@node-red/editor-client/src/types/node-red/func.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node-red/func.d.ts
index f2a1364c0..caaeefc1a 100644
--- a/packages/node_modules/@node-red/editor-client/src/types/node-red/func.d.ts
+++ b/packages/node_modules/@node-red/editor-client/src/types/node-red/func.d.ts
@@ -1,5 +1,5 @@
-/* NOTE: Do not edit directly! This file is generated using \`npm run update-types\` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
+/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
interface NodeMessage {
diff --git a/packages/node_modules/@node-red/editor-client/src/types/node-red/util.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node-red/util.d.ts
index f9e56976f..255243d47 100644
--- a/packages/node_modules/@node-red/editor-client/src/types/node-red/util.d.ts
+++ b/packages/node_modules/@node-red/editor-client/src/types/node-red/util.d.ts
@@ -1,5 +1,5 @@
-/* NOTE: Do not edit directly! This file is generated using \`npm run update-types\` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
+/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
/*
diff --git a/packages/node_modules/@node-red/editor-client/src/types/node/assert.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node/assert.d.ts
new file mode 100644
index 000000000..5d50a9612
--- /dev/null
+++ b/packages/node_modules/@node-red/editor-client/src/types/node/assert.d.ts
@@ -0,0 +1,127 @@
+
+/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
+
+declare module 'assert' {
+ /** An alias of `assert.ok()`. */
+ function assert(value: any, message?: string | Error): asserts value;
+ namespace assert {
+ class AssertionError extends Error {
+ actual: any;
+ expected: any;
+ operator: string;
+ generatedMessage: boolean;
+ code: 'ERR_ASSERTION';
+
+ constructor(options?: {
+ /** If provided, the error message is set to this value. */
+ message?: string | undefined;
+ /** The `actual` property on the error instance. */
+ actual?: any;
+ /** The `expected` property on the error instance. */
+ expected?: any;
+ /** The `operator` property on the error instance. */
+ operator?: string | undefined;
+ /** If provided, the generated stack trace omits frames before this function. */
+ // tslint:disable-next-line:ban-types
+ stackStartFn?: Function | undefined;
+ });
+ }
+
+ class CallTracker {
+ calls(exact?: number): () => void;
+ calls
any>(fn?: Func, exact?: number): Func;
+ report(): CallTrackerReportInformation[];
+ verify(): void;
+ }
+ interface CallTrackerReportInformation {
+ message: string;
+ /** The actual number of times the function was called. */
+ actual: number;
+ /** The number of times the function was expected to be called. */
+ expected: number;
+ /** The name of the function that is wrapped. */
+ operator: string;
+ /** A stack trace of the function. */
+ stack: object;
+ }
+
+ type AssertPredicate = RegExp | (new () => object) | ((thrown: any) => boolean) | object | Error;
+
+ function fail(message?: string | Error): never;
+ /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */
+ function fail(
+ actual: any,
+ expected: any,
+ message?: string | Error,
+ operator?: string,
+ // tslint:disable-next-line:ban-types
+ stackStartFn?: Function,
+ ): never;
+ function ok(value: any, message?: string | Error): asserts value;
+ /** @deprecated since v9.9.0 - use strictEqual() instead. */
+ function equal(actual: any, expected: any, message?: string | Error): void;
+ /** @deprecated since v9.9.0 - use notStrictEqual() instead. */
+ function notEqual(actual: any, expected: any, message?: string | Error): void;
+ /** @deprecated since v9.9.0 - use deepStrictEqual() instead. */
+ function deepEqual(actual: any, expected: any, message?: string | Error): void;
+ /** @deprecated since v9.9.0 - use notDeepStrictEqual() instead. */
+ function notDeepEqual(actual: any, expected: any, message?: string | Error): void;
+ function strictEqual(actual: any, expected: T, message?: string | Error): asserts actual is T;
+ function notStrictEqual(actual: any, expected: any, message?: string | Error): void;
+ function deepStrictEqual(actual: any, expected: T, message?: string | Error): asserts actual is T;
+ function notDeepStrictEqual(actual: any, expected: any, message?: string | Error): void;
+
+ function throws(block: () => any, message?: string | Error): void;
+ function throws(block: () => any, error: AssertPredicate, message?: string | Error): void;
+ function doesNotThrow(block: () => any, message?: string | Error): void;
+ function doesNotThrow(block: () => any, error: AssertPredicate, message?: string | Error): void;
+
+ function ifError(value: any): asserts value is null | undefined;
+
+ function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise;
+ function rejects(
+ block: (() => Promise) | Promise,
+ error: AssertPredicate,
+ message?: string | Error,
+ ): Promise;
+ function doesNotReject(block: (() => Promise) | Promise, message?: string | Error): Promise;
+ function doesNotReject(
+ block: (() => Promise) | Promise,
+ error: AssertPredicate,
+ message?: string | Error,
+ ): Promise;
+
+ function match(value: string, regExp: RegExp, message?: string | Error): void;
+ function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void;
+
+ const strict: Omit<
+ typeof assert,
+ | 'equal'
+ | 'notEqual'
+ | 'deepEqual'
+ | 'notDeepEqual'
+ | 'ok'
+ | 'strictEqual'
+ | 'deepStrictEqual'
+ | 'ifError'
+ | 'strict'
+ > & {
+ (value: any, message?: string | Error): asserts value;
+ equal: typeof strictEqual;
+ notEqual: typeof notStrictEqual;
+ deepEqual: typeof deepStrictEqual;
+ notDeepEqual: typeof notDeepStrictEqual;
+
+ // Mapped types and assertion functions are incompatible?
+ // TS2775: Assertions require every name in the call target
+ // to be declared with an explicit type annotation.
+ ok: typeof ok;
+ strictEqual: typeof strictEqual;
+ deepStrictEqual: typeof deepStrictEqual;
+ ifError: typeof ifError;
+ strict: typeof strict;
+ };
+ }
+
+ export = assert;
+}
diff --git a/packages/node_modules/@node-red/editor-client/src/types/node/async_hooks.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node/async_hooks.d.ts
new file mode 100644
index 000000000..d490d51ba
--- /dev/null
+++ b/packages/node_modules/@node-red/editor-client/src/types/node/async_hooks.d.ts
@@ -0,0 +1,229 @@
+
+/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
+
+/**
+ * Async Hooks module: https://nodejs.org/api/async_hooks.html
+ */
+declare module 'async_hooks' {
+ /**
+ * Returns the asyncId of the current execution context.
+ */
+ function executionAsyncId(): number;
+
+ /**
+ * The resource representing the current execution.
+ * Useful to store data within the resource.
+ *
+ * Resource objects returned by `executionAsyncResource()` are most often internal
+ * Node.js handle objects with undocumented APIs. Using any functions or properties
+ * on the object is likely to crash your application and should be avoided.
+ *
+ * Using `executionAsyncResource()` in the top-level execution context will
+ * return an empty object as there is no handle or request object to use,
+ * but having an object representing the top-level can be helpful.
+ */
+ function executionAsyncResource(): object;
+
+ /**
+ * Returns the ID of the resource responsible for calling the callback that is currently being executed.
+ */
+ function triggerAsyncId(): number;
+
+ interface HookCallbacks {
+ /**
+ * Called when a class is constructed that has the possibility to emit an asynchronous event.
+ * @param asyncId a unique ID for the async resource
+ * @param type the type of the async resource
+ * @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created
+ * @param resource reference to the resource representing the async operation, needs to be released during destroy
+ */
+ init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void;
+
+ /**
+ * When an asynchronous operation is initiated or completes a callback is called to notify the user.
+ * The before callback is called just before said callback is executed.
+ * @param asyncId the unique identifier assigned to the resource about to execute the callback.
+ */
+ before?(asyncId: number): void;
+
+ /**
+ * Called immediately after the callback specified in before is completed.
+ * @param asyncId the unique identifier assigned to the resource which has executed the callback.
+ */
+ after?(asyncId: number): void;
+
+ /**
+ * Called when a promise has resolve() called. This may not be in the same execution id
+ * as the promise itself.
+ * @param asyncId the unique id for the promise that was resolve()d.
+ */
+ promiseResolve?(asyncId: number): void;
+
+ /**
+ * Called after the resource corresponding to asyncId is destroyed
+ * @param asyncId a unique ID for the async resource
+ */
+ destroy?(asyncId: number): void;
+ }
+
+ interface AsyncHook {
+ /**
+ * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
+ */
+ enable(): this;
+
+ /**
+ * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled.
+ */
+ disable(): this;
+ }
+
+ /**
+ * Registers functions to be called for different lifetime events of each async operation.
+ * @param options the callbacks to register
+ * @return an AsyncHooks instance used for disabling and enabling hooks
+ */
+ function createHook(options: HookCallbacks): AsyncHook;
+
+ interface AsyncResourceOptions {
+ /**
+ * The ID of the execution context that created this async event.
+ * @default executionAsyncId()
+ */
+ triggerAsyncId?: number | undefined;
+
+ /**
+ * Disables automatic `emitDestroy` when the object is garbage collected.
+ * This usually does not need to be set (even if `emitDestroy` is called
+ * manually), unless the resource's `asyncId` is retrieved and the
+ * sensitive API's `emitDestroy` is called with it.
+ * @default false
+ */
+ requireManualDestroy?: boolean | undefined;
+ }
+
+ /**
+ * The class AsyncResource was designed to be extended by the embedder's async resources.
+ * Using this users can easily trigger the lifetime events of their own resources.
+ */
+ class AsyncResource {
+ /**
+ * AsyncResource() is meant to be extended. Instantiating a
+ * new AsyncResource() also triggers init. If triggerAsyncId is omitted then
+ * async_hook.executionAsyncId() is used.
+ * @param type The type of async event.
+ * @param triggerAsyncId The ID of the execution context that created
+ * this async event (default: `executionAsyncId()`), or an
+ * AsyncResourceOptions object (since 9.3)
+ */
+ constructor(type: string, triggerAsyncId?: number|AsyncResourceOptions);
+
+ /**
+ * Binds the given function to the current execution context.
+ * @param fn The function to bind to the current execution context.
+ * @param type An optional name to associate with the underlying `AsyncResource`.
+ */
+ static bind any>(fn: Func, type?: string): Func & { asyncResource: AsyncResource };
+
+ /**
+ * Binds the given function to execute to this `AsyncResource`'s scope.
+ * @param fn The function to bind to the current `AsyncResource`.
+ */
+ bind any>(fn: Func): Func & { asyncResource: AsyncResource };
+
+ /**
+ * Call the provided function with the provided arguments in the
+ * execution context of the async resource. This will establish the
+ * context, trigger the AsyncHooks before callbacks, call the function,
+ * trigger the AsyncHooks after callbacks, and then restore the original
+ * execution context.
+ * @param fn The function to call in the execution context of this
+ * async resource.
+ * @param thisArg The receiver to be used for the function call.
+ * @param args Optional arguments to pass to the function.
+ */
+ runInAsyncScope(fn: (this: This, ...args: any[]) => Result, thisArg?: This, ...args: any[]): Result;
+
+ /**
+ * Call AsyncHooks destroy callbacks.
+ */
+ emitDestroy(): this;
+
+ /**
+ * @return the unique ID assigned to this AsyncResource instance.
+ */
+ asyncId(): number;
+
+ /**
+ * @return the trigger ID for this AsyncResource instance.
+ */
+ triggerAsyncId(): number;
+ }
+
+ /**
+ * When having multiple instances of `AsyncLocalStorage`, they are independent
+ * from each other. It is safe to instantiate this class multiple times.
+ */
+ class AsyncLocalStorage {
+ /**
+ * This method disables the instance of `AsyncLocalStorage`. All subsequent calls
+ * to `asyncLocalStorage.getStore()` will return `undefined` until
+ * `asyncLocalStorage.run()` is called again.
+ *
+ * When calling `asyncLocalStorage.disable()`, all current contexts linked to the
+ * instance will be exited.
+ *
+ * Calling `asyncLocalStorage.disable()` is required before the
+ * `asyncLocalStorage` can be garbage collected. This does not apply to stores
+ * provided by the `asyncLocalStorage`, as those objects are garbage collected
+ * along with the corresponding async resources.
+ *
+ * This method is to be used when the `asyncLocalStorage` is not in use anymore
+ * in the current process.
+ */
+ disable(): void;
+
+ /**
+ * This method returns the current store. If this method is called outside of an
+ * asynchronous context initialized by calling `asyncLocalStorage.run`, it will
+ * return `undefined`.
+ */
+ getStore(): T | undefined;
+
+ /**
+ * This methods runs a function synchronously within a context and return its
+ * return value. The store is not accessible outside of the callback function or
+ * the asynchronous operations created within the callback.
+ *
+ * Optionally, arguments can be passed to the function. They will be passed to the
+ * callback function.
+ *
+ * I the callback function throws an error, it will be thrown by `run` too. The
+ * stacktrace will not be impacted by this call and the context will be exited.
+ */
+ // TODO: Apply generic vararg once available
+ run(store: T, callback: (...args: any[]) => R, ...args: any[]): R;
+
+ /**
+ * This methods runs a function synchronously outside of a context and return its
+ * return value. The store is not accessible within the callback function or the
+ * asynchronous operations created within the callback.
+ *
+ * Optionally, arguments can be passed to the function. They will be passed to the
+ * callback function.
+ *
+ * If the callback function throws an error, it will be thrown by `exit` too. The
+ * stacktrace will not be impacted by this call and the context will be
+ * re-entered.
+ */
+ // TODO: Apply generic vararg once available
+ exit(callback: (...args: any[]) => R, ...args: any[]): R;
+
+ /**
+ * Calling `asyncLocalStorage.enterWith(store)` will transition into the context
+ * for the remainder of the current synchronous execution and will persist
+ * through any following asynchronous calls.
+ */
+ enterWith(store: T): void;
+ }
+}
diff --git a/packages/node_modules/@node-red/editor-client/src/types/node/buffer.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node/buffer.d.ts
index 334193f8b..542885696 100644
--- a/packages/node_modules/@node-red/editor-client/src/types/node/buffer.d.ts
+++ b/packages/node_modules/@node-red/editor-client/src/types/node/buffer.d.ts
@@ -1 +1,25 @@
-declare module'node:buffer'{export*from'buffer';}declare module'buffer'{export const INSPECT_MAX_BYTES:number;export const kMaxLength:number;export const kStringMaxLength:number;export const constants:{MAX_LENGTH:number;MAX_STRING_LENGTH:number;};const BuffType:typeof Buffer;export type TranscodeEncoding="ascii"|"utf8"|"utf16le"|"ucs2"|"latin1"|"binary";export function transcode(source:Uint8Array,fromEnc:TranscodeEncoding,toEnc:TranscodeEncoding):Buffer;export const SlowBuffer:{new(size:number):Buffer;prototype:Buffer;};export{BuffType as Buffer};}
\ No newline at end of file
+
+/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
+
+declare module 'buffer' {
+ export const INSPECT_MAX_BYTES: number;
+ export const kMaxLength: number;
+ export const kStringMaxLength: number;
+ export const constants: {
+ MAX_LENGTH: number;
+ MAX_STRING_LENGTH: number;
+ };
+ const BuffType: typeof Buffer;
+
+ export type TranscodeEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "latin1" | "binary";
+
+ export function transcode(source: Uint8Array, fromEnc: TranscodeEncoding, toEnc: TranscodeEncoding): Buffer;
+
+ export const SlowBuffer: {
+ /** @deprecated since v6.0.0, use `Buffer.allocUnsafeSlow()` */
+ new(size: number): Buffer;
+ prototype: Buffer;
+ };
+
+ export { BuffType as Buffer };
+}
diff --git a/packages/node_modules/@node-red/editor-client/src/types/node/child_process.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node/child_process.d.ts
index 9acb22d55..861d9e6d1 100644
--- a/packages/node_modules/@node-red/editor-client/src/types/node/child_process.d.ts
+++ b/packages/node_modules/@node-red/editor-client/src/types/node/child_process.d.ts
@@ -1,6 +1,514 @@
-declare module'node:child_process'{export*from'child_process';}declare module'child_process'{import{BaseEncodingOptions}from'node:fs';import*as events from'node:events';import*as net from'node:net';import{Writable,Readable,Stream,Pipe}from'node:stream';type Serializable=string|object|number|boolean;type SendHandle=net.Socket|net.Server;interface ChildProcess extends events.EventEmitter{stdin:Writable|null;stdout:Readable|null;stderr:Readable|null;readonly channel?:Pipe|null;readonly stdio:[
-Writable|null,Readable|null,Readable|null,Readable|Writable|null|undefined,Readable|Writable|null|undefined];readonly killed:boolean;readonly pid:number;readonly connected:boolean;readonly exitCode:number|null;readonly signalCode:NodeJS.Signals|null;readonly spawnargs:string[];readonly spawnfile:string;kill(signal?:NodeJS.Signals|number):boolean;send(message:Serializable,callback?:(error:Error|null)=>void):boolean;send(message:Serializable,sendHandle?:SendHandle,callback?:(error:Error|null)=>void):boolean;send(message:Serializable,sendHandle?:SendHandle,options?:MessageOptions,callback?:(error:Error|null)=>void):boolean;disconnect():void;unref():void;ref():void;addListener(event:string,listener:(...args:any[])=>void):this;addListener(event:"close",listener:(code:number|null,signal:NodeJS.Signals|null)=>void):this;addListener(event:"disconnect",listener:()=>void):this;addListener(event:"error",listener:(err:Error)=>void):this;addListener(event:"exit",listener:(code:number|null,signal:NodeJS.Signals|null)=>void):this;addListener(event:"message",listener:(message:Serializable,sendHandle:SendHandle)=>void):this;emit(event:string|symbol,...args:any[]):boolean;emit(event:"close",code:number|null,signal:NodeJS.Signals|null):boolean;emit(event:"disconnect"):boolean;emit(event:"error",err:Error):boolean;emit(event:"exit",code:number|null,signal:NodeJS.Signals|null):boolean;emit(event:"message",message:Serializable,sendHandle:SendHandle):boolean;on(event:string,listener:(...args:any[])=>void):this;on(event:"close",listener:(code:number|null,signal:NodeJS.Signals|null)=>void):this;on(event:"disconnect",listener:()=>void):this;on(event:"error",listener:(err:Error)=>void):this;on(event:"exit",listener:(code:number|null,signal:NodeJS.Signals|null)=>void):this;on(event:"message",listener:(message:Serializable,sendHandle:SendHandle)=>void):this;once(event:string,listener:(...args:any[])=>void):this;once(event:"close",listener:(code:number|null,signal:NodeJS.Signals|null)=>void):this;once(event:"disconnect",listener:()=>void):this;once(event:"error",listener:(err:Error)=>void):this;once(event:"exit",listener:(code:number|null,signal:NodeJS.Signals|null)=>void):this;once(event:"message",listener:(message:Serializable,sendHandle:SendHandle)=>void):this;prependListener(event:string,listener:(...args:any[])=>void):this;prependListener(event:"close",listener:(code:number|null,signal:NodeJS.Signals|null)=>void):this;prependListener(event:"disconnect",listener:()=>void):this;prependListener(event:"error",listener:(err:Error)=>void):this;prependListener(event:"exit",listener:(code:number|null,signal:NodeJS.Signals|null)=>void):this;prependListener(event:"message",listener:(message:Serializable,sendHandle:SendHandle)=>void):this;prependOnceListener(event:string,listener:(...args:any[])=>void):this;prependOnceListener(event:"close",listener:(code:number|null,signal:NodeJS.Signals|null)=>void):this;prependOnceListener(event:"disconnect",listener:()=>void):this;prependOnceListener(event:"error",listener:(err:Error)=>void):this;prependOnceListener(event:"exit",listener:(code:number|null,signal:NodeJS.Signals|null)=>void):this;prependOnceListener(event:"message",listener:(message:Serializable,sendHandle:SendHandle)=>void):this;}interface ChildProcessWithoutNullStreams extends ChildProcess{stdin:Writable;stdout:Readable;stderr:Readable;readonly stdio:[
-Writable,Readable,Readable,Readable|Writable|null|undefined,Readable|Writable|null|undefined];}interface ChildProcessByStdio<
-I extends null|Writable,O extends null|Readable,E extends null|Readable,>extends ChildProcess{stdin:I;stdout:O;stderr:E;readonly stdio:[
-I,O,E,Readable|Writable|null|undefined,Readable|Writable|null|undefined];}interface MessageOptions{keepOpen?:boolean;}type StdioOptions="pipe"|"ignore"|"inherit"|Array<("pipe"|"ipc"|"ignore"|"inherit"|Stream|number|null|undefined)>;type SerializationType='json'|'advanced';interface MessagingOptions{serialization?:SerializationType;}interface ProcessEnvOptions{uid?:number;gid?:number;cwd?:string;env?:NodeJS.ProcessEnv;}interface CommonOptions extends ProcessEnvOptions{windowsHide?:boolean;timeout?:number;}interface CommonSpawnOptions extends CommonOptions,MessagingOptions{argv0?:string;stdio?:StdioOptions;shell?:boolean|string;windowsVerbatimArguments?:boolean;}interface SpawnOptions extends CommonSpawnOptions{detached?:boolean;}interface SpawnOptionsWithoutStdio extends SpawnOptions{stdio?:'pipe'|Array;}type StdioNull='inherit'|'ignore'|Stream;type StdioPipe=undefined|null|'pipe';interface SpawnOptionsWithStdioTuple<
-Stdin extends StdioNull|StdioPipe,Stdout extends StdioNull|StdioPipe,Stderr extends StdioNull|StdioPipe,>extends SpawnOptions{stdio:[Stdin,Stdout,Stderr];}function spawn(command:string,options?:SpawnOptionsWithoutStdio):ChildProcessWithoutNullStreams;function spawn(command:string,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,options:SpawnOptions):ChildProcess;function spawn(command:string,args?:ReadonlyArray,options?:SpawnOptionsWithoutStdio):ChildProcessWithoutNullStreams;function spawn(command:string,args:ReadonlyArray,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,args:ReadonlyArray,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,args:ReadonlyArray,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,args:ReadonlyArray,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,args:ReadonlyArray,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,args:ReadonlyArray,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,args:ReadonlyArray,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,args:ReadonlyArray,options:SpawnOptionsWithStdioTuple,):ChildProcessByStdio;function spawn(command:string,args:ReadonlyArray,options:SpawnOptions):ChildProcess;interface ExecOptions extends CommonOptions{shell?:string;maxBuffer?:number;killSignal?:NodeJS.Signals|number;}interface ExecOptionsWithStringEncoding extends ExecOptions{encoding:BufferEncoding;}interface ExecOptionsWithBufferEncoding extends ExecOptions{encoding:BufferEncoding|null;}interface ExecException extends Error{cmd?:string;killed?:boolean;code?:number;signal?:NodeJS.Signals;}function exec(command:string,callback?:(error:ExecException|null,stdout:string,stderr:string)=>void):ChildProcess;function exec(command:string,options:{encoding:"buffer"|null}&ExecOptions,callback?:(error:ExecException|null,stdout:Buffer,stderr:Buffer)=>void):ChildProcess;function exec(command:string,options:{encoding:BufferEncoding}&ExecOptions,callback?:(error:ExecException|null,stdout:string,stderr:string)=>void):ChildProcess;function exec(command:string,options:{encoding:BufferEncoding}&ExecOptions,callback?:(error:ExecException|null,stdout:string|Buffer,stderr:string|Buffer)=>void,):ChildProcess;function exec(command:string,options:ExecOptions,callback?:(error:ExecException|null,stdout:string,stderr:string)=>void):ChildProcess;function exec(command:string,options:(BaseEncodingOptions&ExecOptions)|undefined|null,callback?:(error:ExecException|null,stdout:string|Buffer,stderr:string|Buffer)=>void,):ChildProcess;interface PromiseWithChildextends Promise{child:ChildProcess;}namespace exec{function __promisify__(command:string):PromiseWithChild<{stdout:string,stderr:string}>;function __promisify__(command:string,options:{encoding:"buffer"|null}&ExecOptions):PromiseWithChild<{stdout:Buffer,stderr:Buffer}>;function __promisify__(command:string,options:{encoding:BufferEncoding}&ExecOptions):PromiseWithChild<{stdout:string,stderr:string}>;function __promisify__(command:string,options:ExecOptions):PromiseWithChild<{stdout:string,stderr:string}>;function __promisify__(command:string,options?:(BaseEncodingOptions&ExecOptions)|null):PromiseWithChild<{stdout:string|Buffer,stderr:string|Buffer}>;}interface ExecFileOptions extends CommonOptions{maxBuffer?:number;killSignal?:NodeJS.Signals|number;windowsVerbatimArguments?:boolean;shell?:boolean|string;}interface ExecFileOptionsWithStringEncoding extends ExecFileOptions{encoding:BufferEncoding;}interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions{encoding:'buffer'|null;}interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions{encoding:BufferEncoding;}type ExecFileException=ExecException&NodeJS.ErrnoException;function execFile(file:string):ChildProcess;function execFile(file:string,options:(BaseEncodingOptions&ExecFileOptions)|undefined|null):ChildProcess;function execFile(file:string,args?:ReadonlyArray|null):ChildProcess;function execFile(file:string,args:ReadonlyArray|undefined|null,options:(BaseEncodingOptions&ExecFileOptions)|undefined|null):ChildProcess;function execFile(file:string,callback:(error:ExecFileException|null,stdout:string,stderr:string)=>void):ChildProcess;function execFile(file:string,args:ReadonlyArray|undefined|null,callback:(error:ExecFileException|null,stdout:string,stderr:string)=>void):ChildProcess;function execFile(file:string,options:ExecFileOptionsWithBufferEncoding,callback:(error:ExecFileException|null,stdout:Buffer,stderr:Buffer)=>void):ChildProcess;function execFile(file:string,args:ReadonlyArray|undefined|null,options:ExecFileOptionsWithBufferEncoding,callback:(error:ExecFileException|null,stdout:Buffer,stderr:Buffer)=>void,):ChildProcess;function execFile(file:string,options:ExecFileOptionsWithStringEncoding,callback:(error:ExecFileException|null,stdout:string,stderr:string)=>void):ChildProcess;function execFile(file:string,args:ReadonlyArray|undefined|null,options:ExecFileOptionsWithStringEncoding,callback:(error:ExecFileException|null,stdout:string,stderr:string)=>void,):ChildProcess;function execFile(file:string,options:ExecFileOptionsWithOtherEncoding,callback:(error:ExecFileException|null,stdout:string|Buffer,stderr:string|Buffer)=>void,):ChildProcess;function execFile(file:string,args:ReadonlyArray|undefined|null,options:ExecFileOptionsWithOtherEncoding,callback:(error:ExecFileException|null,stdout:string|Buffer,stderr:string|Buffer)=>void,):ChildProcess;function execFile(file:string,options:ExecFileOptions,callback:(error:ExecFileException|null,stdout:string,stderr:string)=>void):ChildProcess;function execFile(file:string,args:ReadonlyArray|undefined|null,options:ExecFileOptions,callback:(error:ExecFileException|null,stdout:string,stderr:string)=>void):ChildProcess;function execFile(file:string,options:(BaseEncodingOptions&ExecFileOptions)|undefined|null,callback:((error:ExecFileException|null,stdout:string|Buffer,stderr:string|Buffer)=>void)|undefined|null,):ChildProcess;function execFile(file:string,args:ReadonlyArray|undefined|null,options:(BaseEncodingOptions&ExecFileOptions)|undefined|null,callback:((error:ExecFileException|null,stdout:string|Buffer,stderr:string|Buffer)=>void)|undefined|null,):ChildProcess;namespace execFile{function __promisify__(file:string):PromiseWithChild<{stdout:string,stderr:string}>;function __promisify__(file:string,args:ReadonlyArray|undefined|null):PromiseWithChild<{stdout:string,stderr:string}>;function __promisify__(file:string,options:ExecFileOptionsWithBufferEncoding):PromiseWithChild<{stdout:Buffer,stderr:Buffer}>;function __promisify__(file:string,args:ReadonlyArray|undefined|null,options:ExecFileOptionsWithBufferEncoding):PromiseWithChild<{stdout:Buffer,stderr:Buffer}>;function __promisify__(file:string,options:ExecFileOptionsWithStringEncoding):PromiseWithChild<{stdout:string,stderr:string}>;function __promisify__(file:string,args:ReadonlyArray|undefined|null,options:ExecFileOptionsWithStringEncoding):PromiseWithChild<{stdout:string,stderr:string}>;function __promisify__(file:string,options:ExecFileOptionsWithOtherEncoding):PromiseWithChild<{stdout:string|Buffer,stderr:string|Buffer}>;function __promisify__(file:string,args:ReadonlyArray|undefined|null,options:ExecFileOptionsWithOtherEncoding,):PromiseWithChild<{stdout:string|Buffer,stderr:string|Buffer}>;function __promisify__(file:string,options:ExecFileOptions):PromiseWithChild<{stdout:string,stderr:string}>;function __promisify__(file:string,args:ReadonlyArray|undefined|null,options:ExecFileOptions):PromiseWithChild<{stdout:string,stderr:string}>;function __promisify__(file:string,options:(BaseEncodingOptions&ExecFileOptions)|undefined|null):PromiseWithChild<{stdout:string|Buffer,stderr:string|Buffer}>;function __promisify__(file:string,args:ReadonlyArray|undefined|null,options:(BaseEncodingOptions&ExecFileOptions)|undefined|null,):PromiseWithChild<{stdout:string|Buffer,stderr:string|Buffer}>;}interface ForkOptions extends ProcessEnvOptions,MessagingOptions{execPath?:string;execArgv?:string[];silent?:boolean;stdio?:StdioOptions;detached?:boolean;windowsVerbatimArguments?:boolean;}function fork(modulePath:string,options?:ForkOptions):ChildProcess;function fork(modulePath:string,args?:ReadonlyArray,options?:ForkOptions):ChildProcess;interface SpawnSyncOptions extends CommonSpawnOptions{input?:string|NodeJS.ArrayBufferView;killSignal?:NodeJS.Signals|number;maxBuffer?:number;encoding?:BufferEncoding|'buffer'|null;}interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions{encoding:BufferEncoding;}interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions{encoding?:'buffer'|null;}interface SpawnSyncReturns{pid:number;output:string[];stdout:T;stderr:T;status:number|null;signal:NodeJS.Signals|null;error?:Error;}function spawnSync(command:string):SpawnSyncReturns;function spawnSync(command:string,options?:SpawnSyncOptionsWithStringEncoding):SpawnSyncReturns;function spawnSync(command:string,options?:SpawnSyncOptionsWithBufferEncoding):SpawnSyncReturns;function spawnSync(command:string,options?:SpawnSyncOptions):SpawnSyncReturns;function spawnSync(command:string,args?:ReadonlyArray,options?:SpawnSyncOptionsWithStringEncoding):SpawnSyncReturns;function spawnSync(command:string,args?:ReadonlyArray,options?:SpawnSyncOptionsWithBufferEncoding):SpawnSyncReturns;function spawnSync(command:string,args?:ReadonlyArray,options?:SpawnSyncOptions):SpawnSyncReturns;interface ExecSyncOptions extends CommonOptions{input?:string|Uint8Array;stdio?:StdioOptions;shell?:string;killSignal?:NodeJS.Signals|number;maxBuffer?:number;encoding?:BufferEncoding|'buffer'|null;}interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions{encoding:BufferEncoding;}interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions{encoding?:'buffer'|null;}function execSync(command:string):Buffer;function execSync(command:string,options?:ExecSyncOptionsWithStringEncoding):string;function execSync(command:string,options?:ExecSyncOptionsWithBufferEncoding):Buffer;function execSync(command:string,options?:ExecSyncOptions):Buffer;interface ExecFileSyncOptions extends CommonOptions{input?:string|NodeJS.ArrayBufferView;stdio?:StdioOptions;killSignal?:NodeJS.Signals|number;maxBuffer?:number;encoding?:BufferEncoding;shell?:boolean|string;}interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions{encoding:BufferEncoding;}interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions{encoding:BufferEncoding;}function execFileSync(command:string):Buffer;function execFileSync(command:string,options?:ExecFileSyncOptionsWithStringEncoding):string;function execFileSync(command:string,options?:ExecFileSyncOptionsWithBufferEncoding):Buffer;function execFileSync(command:string,options?:ExecFileSyncOptions):Buffer;function execFileSync(command:string,args?:ReadonlyArray,options?:ExecFileSyncOptionsWithStringEncoding):string;function execFileSync(command:string,args?:ReadonlyArray,options?:ExecFileSyncOptionsWithBufferEncoding):Buffer;function execFileSync(command:string,args?:ReadonlyArray,options?:ExecFileSyncOptions):Buffer;}
\ No newline at end of file
+
+/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
+
+declare module 'child_process' {
+ import { BaseEncodingOptions } from 'fs';
+ import * as events from 'events';
+ import * as net from 'net';
+ import { Writable, Readable, Stream, Pipe } from 'stream';
+
+ type Serializable = string | object | number | boolean;
+ type SendHandle = net.Socket | net.Server;
+
+ interface ChildProcess extends events.EventEmitter {
+ stdin: Writable | null;
+ stdout: Readable | null;
+ stderr: Readable | null;
+ readonly channel?: Pipe | null | undefined;
+ readonly stdio: [
+ Writable | null, // stdin
+ Readable | null, // stdout
+ Readable | null, // stderr
+ Readable | Writable | null | undefined, // extra
+ Readable | Writable | null | undefined // extra
+ ];
+ readonly killed: boolean;
+ readonly pid: number;
+ readonly connected: boolean;
+ readonly exitCode: number | null;
+ readonly signalCode: NodeJS.Signals | null;
+ readonly spawnargs: string[];
+ readonly spawnfile: string;
+ kill(signal?: NodeJS.Signals | number): boolean;
+ send(message: Serializable, callback?: (error: Error | null) => void): boolean;
+ send(message: Serializable, sendHandle?: SendHandle, callback?: (error: Error | null) => void): boolean;
+ send(message: Serializable, sendHandle?: SendHandle, options?: MessageOptions, callback?: (error: Error | null) => void): boolean;
+ disconnect(): void;
+ unref(): void;
+ ref(): void;
+
+ /**
+ * events.EventEmitter
+ * 1. close
+ * 2. disconnect
+ * 3. error
+ * 4. exit
+ * 5. message
+ */
+
+ addListener(event: string, listener: (...args: any[]) => void): this;
+ addListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ addListener(event: "disconnect", listener: () => void): this;
+ addListener(event: "error", listener: (err: Error) => void): this;
+ addListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ addListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+
+ emit(event: string | symbol, ...args: any[]): boolean;
+ emit(event: "close", code: number | null, signal: NodeJS.Signals | null): boolean;
+ emit(event: "disconnect"): boolean;
+ emit(event: "error", err: Error): boolean;
+ emit(event: "exit", code: number | null, signal: NodeJS.Signals | null): boolean;
+ emit(event: "message", message: Serializable, sendHandle: SendHandle): boolean;
+
+ on(event: string, listener: (...args: any[]) => void): this;
+ on(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ on(event: "disconnect", listener: () => void): this;
+ on(event: "error", listener: (err: Error) => void): this;
+ on(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ on(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+
+ once(event: string, listener: (...args: any[]) => void): this;
+ once(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ once(event: "disconnect", listener: () => void): this;
+ once(event: "error", listener: (err: Error) => void): this;
+ once(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ once(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+
+ prependListener(event: string, listener: (...args: any[]) => void): this;
+ prependListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ prependListener(event: "disconnect", listener: () => void): this;
+ prependListener(event: "error", listener: (err: Error) => void): this;
+ prependListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ prependListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ prependOnceListener(event: "disconnect", listener: () => void): this;
+ prependOnceListener(event: "error", listener: (err: Error) => void): this;
+ prependOnceListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ prependOnceListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+ }
+
+ // return this object when stdio option is undefined or not specified
+ interface ChildProcessWithoutNullStreams extends ChildProcess {
+ stdin: Writable;
+ stdout: Readable;
+ stderr: Readable;
+ readonly stdio: [
+ Writable, // stdin
+ Readable, // stdout
+ Readable, // stderr
+ Readable | Writable | null | undefined, // extra, no modification
+ Readable | Writable | null | undefined // extra, no modification
+ ];
+ }
+
+ // return this object when stdio option is a tuple of 3
+ interface ChildProcessByStdio<
+ I extends null | Writable,
+ O extends null | Readable,
+ E extends null | Readable,
+ > extends ChildProcess {
+ stdin: I;
+ stdout: O;
+ stderr: E;
+ readonly stdio: [
+ I,
+ O,
+ E,
+ Readable | Writable | null | undefined, // extra, no modification
+ Readable | Writable | null | undefined // extra, no modification
+ ];
+ }
+
+ interface MessageOptions {
+ keepOpen?: boolean | undefined;
+ }
+
+ type StdioOptions = "pipe" | "ignore" | "inherit" | Array<("pipe" | "ipc" | "ignore" | "inherit" | Stream | number | null | undefined)>;
+
+ type SerializationType = 'json' | 'advanced';
+
+ interface MessagingOptions {
+ /**
+ * Specify the kind of serialization used for sending messages between processes.
+ * @default 'json'
+ */
+ serialization?: SerializationType | undefined;
+ }
+
+ interface ProcessEnvOptions {
+ uid?: number | undefined;
+ gid?: number | undefined;
+ cwd?: string | undefined;
+ env?: NodeJS.ProcessEnv | undefined;
+ }
+
+ interface CommonOptions extends ProcessEnvOptions {
+ /**
+ * @default true
+ */
+ windowsHide?: boolean | undefined;
+ /**
+ * @default 0
+ */
+ timeout?: number | undefined;
+ }
+
+ interface CommonSpawnOptions extends CommonOptions, MessagingOptions {
+ argv0?: string | undefined;
+ stdio?: StdioOptions | undefined;
+ shell?: boolean | string | undefined;
+ windowsVerbatimArguments?: boolean | undefined;
+ }
+
+ interface SpawnOptions extends CommonSpawnOptions {
+ detached?: boolean | undefined;
+ }
+
+ interface SpawnOptionsWithoutStdio extends SpawnOptions {
+ stdio?: 'pipe' | Array | undefined;
+ }
+
+ type StdioNull = 'inherit' | 'ignore' | Stream;
+ type StdioPipe = undefined | null | 'pipe';
+
+ interface SpawnOptionsWithStdioTuple<
+ Stdin extends StdioNull | StdioPipe,
+ Stdout extends StdioNull | StdioPipe,
+ Stderr extends StdioNull | StdioPipe,
+ > extends SpawnOptions {
+ stdio: [Stdin, Stdout, Stderr];
+ }
+
+ // overloads of spawn without 'args'
+ function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams;
+
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+
+ function spawn(command: string, options: SpawnOptions): ChildProcess;
+
+ // overloads of spawn with 'args'
+ function spawn(command: string, args?: ReadonlyArray, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams;
+
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+
+ function spawn(command: string, args: ReadonlyArray, options: SpawnOptions): ChildProcess;
+
+ interface ExecOptions extends CommonOptions {
+ shell?: string | undefined;
+ maxBuffer?: number | undefined;
+ killSignal?: NodeJS.Signals | number | undefined;
+ }
+
+ interface ExecOptionsWithStringEncoding extends ExecOptions {
+ encoding: BufferEncoding;
+ }
+
+ interface ExecOptionsWithBufferEncoding extends ExecOptions {
+ encoding: BufferEncoding | null; // specify `null`.
+ }
+
+ interface ExecException extends Error {
+ cmd?: string | undefined;
+ killed?: boolean | undefined;
+ code?: number | undefined;
+ signal?: NodeJS.Signals | undefined;
+ }
+
+ // no `options` definitely means stdout/stderr are `string`.
+ function exec(command: string, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
+
+ // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
+ function exec(command: string, options: { encoding: "buffer" | null } & ExecOptions, callback?: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess;
+
+ // `options` with well known `encoding` means stdout/stderr are definitely `string`.
+ function exec(command: string, options: { encoding: BufferEncoding } & ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
+
+ // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`.
+ // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`.
+ function exec(
+ command: string,
+ options: { encoding: BufferEncoding } & ExecOptions,
+ callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+ ): ChildProcess;
+
+ // `options` without an `encoding` means stdout/stderr are definitely `string`.
+ function exec(command: string, options: ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
+
+ // fallback if nothing else matches. Worst case is always `string | Buffer`.
+ function exec(
+ command: string,
+ options: (BaseEncodingOptions & ExecOptions) | undefined | null,
+ callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+ ): ChildProcess;
+
+ interface PromiseWithChild extends Promise {
+ child: ChildProcess;
+ }
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace exec {
+ function __promisify__(command: string): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(command: string, options: { encoding: "buffer" | null } & ExecOptions): PromiseWithChild<{ stdout: Buffer, stderr: Buffer }>;
+ function __promisify__(command: string, options: { encoding: BufferEncoding } & ExecOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(command: string, options: ExecOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(command: string, options?: (BaseEncodingOptions & ExecOptions) | null): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
+ }
+
+ interface ExecFileOptions extends CommonOptions {
+ maxBuffer?: number | undefined;
+ killSignal?: NodeJS.Signals | number | undefined;
+ windowsVerbatimArguments?: boolean | undefined;
+ shell?: boolean | string | undefined;
+ }
+ interface ExecFileOptionsWithStringEncoding extends ExecFileOptions {
+ encoding: BufferEncoding;
+ }
+ interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions {
+ encoding: 'buffer' | null;
+ }
+ interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions {
+ encoding: BufferEncoding;
+ }
+ type ExecFileException = ExecException & NodeJS.ErrnoException;
+
+ function execFile(file: string): ChildProcess;
+ function execFile(file: string, options: (BaseEncodingOptions & ExecFileOptions) | undefined | null): ChildProcess;
+ function execFile(file: string, args?: ReadonlyArray | null): ChildProcess;
+ function execFile(file: string, args: ReadonlyArray | undefined | null, options: (BaseEncodingOptions & ExecFileOptions) | undefined | null): ChildProcess;
+
+ // no `options` definitely means stdout/stderr are `string`.
+ function execFile(file: string, callback: (error: ExecFileException | null, stdout: string, stderr: string) => void): ChildProcess;
+ function execFile(file: string, args: ReadonlyArray | undefined | null, callback: (error: ExecFileException | null, stdout: string, stderr: string) => void): ChildProcess;
+
+ // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
+ function execFile(file: string, options: ExecFileOptionsWithBufferEncoding, callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptionsWithBufferEncoding,
+ callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void,
+ ): ChildProcess;
+
+ // `options` with well known `encoding` means stdout/stderr are definitely `string`.
+ function execFile(file: string, options: ExecFileOptionsWithStringEncoding, callback: (error: ExecFileException | null, stdout: string, stderr: string) => void): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptionsWithStringEncoding,
+ callback: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+
+ // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`.
+ // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`.
+ function execFile(
+ file: string,
+ options: ExecFileOptionsWithOtherEncoding,
+ callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptionsWithOtherEncoding,
+ callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+ ): ChildProcess;
+
+ // `options` without an `encoding` means stdout/stderr are definitely `string`.
+ function execFile(file: string, options: ExecFileOptions, callback: (error: ExecFileException | null, stdout: string, stderr: string) => void): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptions,
+ callback: (error: ExecFileException | null, stdout: string, stderr: string) => void
+ ): ChildProcess;
+
+ // fallback if nothing else matches. Worst case is always `string | Buffer`.
+ function execFile(
+ file: string,
+ options: (BaseEncodingOptions & ExecFileOptions) | undefined | null,
+ callback: ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: (BaseEncodingOptions & ExecFileOptions) | undefined | null,
+ callback: ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null,
+ ): ChildProcess;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace execFile {
+ function __promisify__(file: string): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(file: string, args: ReadonlyArray | undefined | null): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(file: string, options: ExecFileOptionsWithBufferEncoding): PromiseWithChild<{ stdout: Buffer, stderr: Buffer }>;
+ function __promisify__(file: string, args: ReadonlyArray