mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Merge remote-tracking branch 'refs/remotes/origin/allow-number-user-properties-mqtt' into allow-number-user-properties-mqtt
This commit is contained in:
commit
21832a0bd0
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [18, 20, 22.4.x]
|
node-version: [18, 20, 22]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
|
35
CHANGELOG.md
35
CHANGELOG.md
@ -1,3 +1,38 @@
|
|||||||
|
#### 4.0.3: Maintenance Release
|
||||||
|
|
||||||
|
Editor
|
||||||
|
|
||||||
|
- Refresh page title after changing tab name (#4850) @kazuhitoyokoi
|
||||||
|
- Add Japanese translations for v4.0.2 (again) (#4853) @kazuhitoyokoi
|
||||||
|
- Stay in quick-add mode following context menu insert (#4883) @knolleary
|
||||||
|
- Do not include Junction type in quick-add for virtual links (#4879) @knolleary
|
||||||
|
- Multiplayer cursor tracking (#4845) @knolleary
|
||||||
|
- Hide add-flow options when disabled via editorTheme (#4869) @knolleary
|
||||||
|
- Fix env-var config select when multiple defined (#4872) @knolleary
|
||||||
|
- Fix subflow outbound-link filter (#4857) @GogoVega
|
||||||
|
- Add French translations for v4.0.2 (#4856) @GogoVega
|
||||||
|
- Fix moving link wires (#4851) @knolleary
|
||||||
|
- Adjust type search dialog position to prevent x-overflow (#4844) @Steve-Mcl
|
||||||
|
- fix: modulesInUse might be undefined (#4838) @lorenz-maurer
|
||||||
|
- Add Japanese translations for v4.0.2 (#4849) @kazuhitoyokoi
|
||||||
|
- Fix menu to enable/disable selection when it's a group (#4828) @GogoVega
|
||||||
|
|
||||||
|
Runtime
|
||||||
|
|
||||||
|
- Update dependencies (#4874) @knolleary
|
||||||
|
- GitHub: Add citation file to enable "Cite this repository" feature (#4861) @lobis
|
||||||
|
- Remove use of util.log (#4875) @knolleary
|
||||||
|
|
||||||
|
Nodes
|
||||||
|
|
||||||
|
- Fix invalid property error in range node example (#4855)
|
||||||
|
- Fix typo in flow example name (#4854) @kazuhitoyokoi
|
||||||
|
- Move SNI, ALPN and Verify Server cert out of check (#4882) @hardillb
|
||||||
|
- Set status of mqtt nodes to "disconnected" when deregistered from broker (#4878) @Steve-Mcl
|
||||||
|
- MQTT: Ensure will payload is a string (#4873) @knolleary
|
||||||
|
- Let batch node terminate "early" if msg.parts set to end of sequence (#4829) @dceejay
|
||||||
|
- Fix unintentional Capitalisation in Split node name (#4835) @dceejay
|
||||||
|
|
||||||
#### 4.0.2: Maintenance Release
|
#### 4.0.2: Maintenance Release
|
||||||
|
|
||||||
Editor
|
Editor
|
||||||
|
16
package.json
16
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "node-red",
|
"name": "node-red",
|
||||||
"version": "4.0.2",
|
"version": "4.0.3",
|
||||||
"description": "Low-code programming for event-driven applications",
|
"description": "Low-code programming for event-driven applications",
|
||||||
"homepage": "https://nodered.org",
|
"homepage": "https://nodered.org",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@ -26,13 +26,13 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"acorn": "8.11.3",
|
"acorn": "8.12.1",
|
||||||
"acorn-walk": "8.3.2",
|
"acorn-walk": "8.3.4",
|
||||||
"ajv": "8.14.0",
|
"ajv": "8.17.1",
|
||||||
"async-mutex": "0.5.0",
|
"async-mutex": "0.5.0",
|
||||||
"basic-auth": "2.0.1",
|
"basic-auth": "2.0.1",
|
||||||
"bcryptjs": "2.4.3",
|
"bcryptjs": "2.4.3",
|
||||||
"body-parser": "1.20.2",
|
"body-parser": "1.20.3",
|
||||||
"cheerio": "1.0.0-rc.10",
|
"cheerio": "1.0.0-rc.10",
|
||||||
"clone": "2.1.2",
|
"clone": "2.1.2",
|
||||||
"content-type": "1.0.5",
|
"content-type": "1.0.5",
|
||||||
@ -41,7 +41,7 @@
|
|||||||
"cors": "2.8.5",
|
"cors": "2.8.5",
|
||||||
"cronosjs": "1.7.1",
|
"cronosjs": "1.7.1",
|
||||||
"denque": "2.1.0",
|
"denque": "2.1.0",
|
||||||
"express": "4.19.2",
|
"express": "4.21.0",
|
||||||
"express-session": "1.18.0",
|
"express-session": "1.18.0",
|
||||||
"form-data": "4.0.0",
|
"form-data": "4.0.0",
|
||||||
"fs-extra": "11.2.0",
|
"fs-extra": "11.2.0",
|
||||||
@ -64,7 +64,7 @@
|
|||||||
"mqtt": "5.7.0",
|
"mqtt": "5.7.0",
|
||||||
"multer": "1.4.5-lts.1",
|
"multer": "1.4.5-lts.1",
|
||||||
"mustache": "4.2.0",
|
"mustache": "4.2.0",
|
||||||
"node-red-admin": "^4.0.0",
|
"node-red-admin": "^4.0.1",
|
||||||
"node-watch": "0.7.4",
|
"node-watch": "0.7.4",
|
||||||
"nopt": "5.0.0",
|
"nopt": "5.0.0",
|
||||||
"oauth2orize": "1.12.0",
|
"oauth2orize": "1.12.0",
|
||||||
@ -76,7 +76,7 @@
|
|||||||
"rfdc": "^1.3.1",
|
"rfdc": "^1.3.1",
|
||||||
"semver": "7.5.4",
|
"semver": "7.5.4",
|
||||||
"tar": "7.2.0",
|
"tar": "7.2.0",
|
||||||
"tough-cookie": "4.1.4",
|
"tough-cookie": "^5.0.0",
|
||||||
"uglify-js": "3.17.4",
|
"uglify-js": "3.17.4",
|
||||||
"uuid": "9.0.1",
|
"uuid": "9.0.1",
|
||||||
"ws": "7.5.10",
|
"ws": "7.5.10",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@node-red/editor-api",
|
"name": "@node-red/editor-api",
|
||||||
"version": "4.0.2",
|
"version": "4.0.3",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"main": "./lib/index.js",
|
"main": "./lib/index.js",
|
||||||
"repository": {
|
"repository": {
|
||||||
@ -16,14 +16,14 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@node-red/util": "4.0.2",
|
"@node-red/util": "4.0.3",
|
||||||
"@node-red/editor-client": "4.0.2",
|
"@node-red/editor-client": "4.0.3",
|
||||||
"bcryptjs": "2.4.3",
|
"bcryptjs": "2.4.3",
|
||||||
"body-parser": "1.20.2",
|
"body-parser": "1.20.3",
|
||||||
"clone": "2.1.2",
|
"clone": "2.1.2",
|
||||||
"cors": "2.8.5",
|
"cors": "2.8.5",
|
||||||
"express-session": "1.18.0",
|
"express-session": "1.18.0",
|
||||||
"express": "4.19.2",
|
"express": "4.21.0",
|
||||||
"memorystore": "1.6.7",
|
"memorystore": "1.6.7",
|
||||||
"mime": "3.0.0",
|
"mime": "3.0.0",
|
||||||
"multer": "1.4.5-lts.1",
|
"multer": "1.4.5-lts.1",
|
||||||
|
@ -562,7 +562,9 @@
|
|||||||
"types": {
|
"types": {
|
||||||
"local": "Local",
|
"local": "Local",
|
||||||
"examples": "Examples"
|
"examples": "Examples"
|
||||||
}
|
},
|
||||||
|
"type": "Type",
|
||||||
|
"name": "Name"
|
||||||
},
|
},
|
||||||
"palette": {
|
"palette": {
|
||||||
"noInfo": "no information available",
|
"noInfo": "no information available",
|
||||||
|
@ -562,7 +562,9 @@
|
|||||||
"types": {
|
"types": {
|
||||||
"local": "ローカル",
|
"local": "ローカル",
|
||||||
"examples": "サンプル"
|
"examples": "サンプル"
|
||||||
}
|
},
|
||||||
|
"type": "型",
|
||||||
|
"name": "名前"
|
||||||
},
|
},
|
||||||
"palette": {
|
"palette": {
|
||||||
"noInfo": "情報がありません",
|
"noInfo": "情報がありません",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@node-red/editor-client",
|
"name": "@node-red/editor-client",
|
||||||
"version": "4.0.2",
|
"version": "4.0.3",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -839,10 +839,10 @@ RED.library = (function() {
|
|||||||
if (file && file.label && !file.children) {
|
if (file && file.label && !file.children) {
|
||||||
$.get("library/"+file.library+"/"+file.type+"/"+file.path, function(data) {
|
$.get("library/"+file.library+"/"+file.type+"/"+file.path, function(data) {
|
||||||
//TODO: nls + sanitize
|
//TODO: nls + sanitize
|
||||||
var propRow = $('<tr class="red-ui-help-info-row"><td>Type</td><td></td></tr>').appendTo(table);
|
var propRow = $('<tr class="red-ui-help-info-row"><td>'+RED._("library.type")+'</td><td></td></tr>').appendTo(table);
|
||||||
$(propRow.children()[1]).text(activeLibrary.type);
|
$(propRow.children()[1]).text(activeLibrary.type);
|
||||||
if (file.props.hasOwnProperty('name')) {
|
if (file.props.hasOwnProperty('name')) {
|
||||||
propRow = $('<tr class="red-ui-help-info-row"><td>Name</td><td>'+file.props.name+'</td></tr>').appendTo(table);
|
propRow = $('<tr class="red-ui-help-info-row"><td>'+RED._("library.name")+'</td><td>'+file.props.name+'</td></tr>').appendTo(table);
|
||||||
$(propRow.children()[1]).text(file.props.name);
|
$(propRow.children()[1]).text(file.props.name);
|
||||||
}
|
}
|
||||||
for (var p in file.props) {
|
for (var p in file.props) {
|
||||||
|
@ -204,7 +204,7 @@ RED.sidebar.info = (function() {
|
|||||||
|
|
||||||
propertiesPanelHeaderIcon.empty();
|
propertiesPanelHeaderIcon.empty();
|
||||||
RED.utils.createNodeIcon({type:"_selection_"}).appendTo(propertiesPanelHeaderIcon);
|
RED.utils.createNodeIcon({type:"_selection_"}).appendTo(propertiesPanelHeaderIcon);
|
||||||
propertiesPanelHeaderLabel.text("Selection");
|
propertiesPanelHeaderLabel.text(RED._("sidebar.info.selection"));
|
||||||
propertiesPanelHeaderReveal.hide();
|
propertiesPanelHeaderReveal.hide();
|
||||||
propertiesPanelHeaderHelp.hide();
|
propertiesPanelHeaderHelp.hide();
|
||||||
propertiesPanelHeaderCopyLink.hide();
|
propertiesPanelHeaderCopyLink.hide();
|
||||||
|
@ -1209,7 +1209,10 @@ RED.view = (function() {
|
|||||||
lasso = null;
|
lasso = null;
|
||||||
}
|
}
|
||||||
if (d3.event.touches || d3.event.button === 0) {
|
if (d3.event.touches || d3.event.button === 0) {
|
||||||
if ((mouse_mode === 0 || mouse_mode === RED.state.QUICK_JOINING) && isControlPressed(d3.event) && !(d3.event.altKey || d3.event.shiftKey)) {
|
if (
|
||||||
|
(mouse_mode === 0 && isControlPressed(d3.event) && !(d3.event.altKey || d3.event.shiftKey)) ||
|
||||||
|
mouse_mode === RED.state.QUICK_JOINING
|
||||||
|
) {
|
||||||
// Trigger quick add dialog
|
// Trigger quick add dialog
|
||||||
d3.event.stopPropagation();
|
d3.event.stopPropagation();
|
||||||
clearSelection();
|
clearSelection();
|
||||||
@ -1285,7 +1288,6 @@ RED.view = (function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var mainPos = $("#red-ui-main-container").position();
|
var mainPos = $("#red-ui-main-container").position();
|
||||||
|
|
||||||
if (mouse_mode !== RED.state.QUICK_JOINING) {
|
if (mouse_mode !== RED.state.QUICK_JOINING) {
|
||||||
mouse_mode = RED.state.QUICK_JOINING;
|
mouse_mode = RED.state.QUICK_JOINING;
|
||||||
$(window).on('keyup',disableQuickJoinEventHandler);
|
$(window).on('keyup',disableQuickJoinEventHandler);
|
||||||
@ -3057,8 +3059,8 @@ RED.view = (function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function disableQuickJoinEventHandler(evt) {
|
function disableQuickJoinEventHandler(evt) {
|
||||||
// Check for ctrl (all browsers), "Meta" (Chrome/FF), keyCode 91 (Safari)
|
// Check for ctrl (all browsers), "Meta" (Chrome/FF), keyCode 91 (Safari), or Escape
|
||||||
if (evt.keyCode === 17 || evt.key === "Meta" || evt.keyCode === 91) {
|
if (evt.keyCode === 17 || evt.key === "Meta" || evt.keyCode === 91 || evt.keyCode === 27) {
|
||||||
resetMouseVars();
|
resetMouseVars();
|
||||||
hideDragLines();
|
hideDragLines();
|
||||||
redraw();
|
redraw();
|
||||||
|
@ -920,6 +920,17 @@ RED.workspaces = (function() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
refresh: function() {
|
refresh: function() {
|
||||||
|
var workspace = RED.nodes.workspace(RED.workspaces.active());
|
||||||
|
if (workspace) {
|
||||||
|
document.title = `${documentTitle} : ${workspace.label}`;
|
||||||
|
} else {
|
||||||
|
var subflow = RED.nodes.subflow(RED.workspaces.active());
|
||||||
|
if (subflow) {
|
||||||
|
document.title = `${documentTitle} : ${subflow.name}`;
|
||||||
|
} else {
|
||||||
|
document.title = documentTitle
|
||||||
|
}
|
||||||
|
}
|
||||||
RED.nodes.eachWorkspace(function(ws) {
|
RED.nodes.eachWorkspace(function(ws) {
|
||||||
workspace_tabs.renameTab(ws.id,ws.label);
|
workspace_tabs.renameTab(ws.id,ws.label);
|
||||||
$("#red-ui-tab-"+(ws.id.replace(".","-"))).attr("flowname",ws.label)
|
$("#red-ui-tab-"+(ws.id.replace(".","-"))).attr("flowname",ws.label)
|
||||||
|
@ -104,14 +104,14 @@ module.exports = function(RED) {
|
|||||||
if (this.credentials && this.credentials.passphrase) {
|
if (this.credentials && this.credentials.passphrase) {
|
||||||
opts.passphrase = this.credentials.passphrase;
|
opts.passphrase = this.credentials.passphrase;
|
||||||
}
|
}
|
||||||
if (this.servername) {
|
|
||||||
opts.servername = this.servername;
|
|
||||||
}
|
|
||||||
if (this.alpnprotocol) {
|
|
||||||
opts.ALPNProtocols = [this.alpnprotocol];
|
|
||||||
}
|
|
||||||
opts.rejectUnauthorized = this.verifyservercert;
|
|
||||||
}
|
}
|
||||||
|
if (this.servername) {
|
||||||
|
opts.servername = this.servername;
|
||||||
|
}
|
||||||
|
if (this.alpnprotocol) {
|
||||||
|
opts.ALPNProtocols = [this.alpnprotocol];
|
||||||
|
}
|
||||||
|
opts.rejectUnauthorized = this.verifyservercert;
|
||||||
return opts;
|
return opts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -456,7 +456,7 @@
|
|||||||
"staticTopic": "Subscribe to single topic",
|
"staticTopic": "Subscribe to single topic",
|
||||||
"dynamicTopic": "Dynamic subscription",
|
"dynamicTopic": "Dynamic subscription",
|
||||||
"auto-connect": "Connect automatically",
|
"auto-connect": "Connect automatically",
|
||||||
"auto-mode-depreciated": "This option is depreciated. Please use the new auto-detect mode.",
|
"auto-mode-depreciated": "This option is deprecated. Please use the new auto-detect mode.",
|
||||||
"none": "none",
|
"none": "none",
|
||||||
"other": "other"
|
"other": "other"
|
||||||
},
|
},
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@node-red/nodes",
|
"name": "@node-red/nodes",
|
||||||
"version": "4.0.2",
|
"version": "4.0.3",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -15,10 +15,10 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"acorn": "8.11.3",
|
"acorn": "8.12.1",
|
||||||
"acorn-walk": "8.3.2",
|
"acorn-walk": "8.3.4",
|
||||||
"ajv": "8.14.0",
|
"ajv": "8.17.1",
|
||||||
"body-parser": "1.20.2",
|
"body-parser": "1.20.3",
|
||||||
"cheerio": "1.0.0-rc.10",
|
"cheerio": "1.0.0-rc.10",
|
||||||
"content-type": "1.0.5",
|
"content-type": "1.0.5",
|
||||||
"cookie-parser": "1.4.6",
|
"cookie-parser": "1.4.6",
|
||||||
@ -41,7 +41,7 @@
|
|||||||
"node-watch": "0.7.4",
|
"node-watch": "0.7.4",
|
||||||
"on-headers": "1.0.2",
|
"on-headers": "1.0.2",
|
||||||
"raw-body": "2.5.2",
|
"raw-body": "2.5.2",
|
||||||
"tough-cookie": "4.1.4",
|
"tough-cookie": "^5.0.0",
|
||||||
"uuid": "9.0.1",
|
"uuid": "9.0.1",
|
||||||
"ws": "7.5.10",
|
"ws": "7.5.10",
|
||||||
"xml2js": "0.6.2",
|
"xml2js": "0.6.2",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@node-red/registry",
|
"name": "@node-red/registry",
|
||||||
"version": "4.0.2",
|
"version": "4.0.3",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"main": "./lib/index.js",
|
"main": "./lib/index.js",
|
||||||
"repository": {
|
"repository": {
|
||||||
@ -16,7 +16,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@node-red/util": "4.0.2",
|
"@node-red/util": "4.0.3",
|
||||||
"clone": "2.1.2",
|
"clone": "2.1.2",
|
||||||
"fs-extra": "11.2.0",
|
"fs-extra": "11.2.0",
|
||||||
"semver": "7.5.4",
|
"semver": "7.5.4",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@node-red/runtime",
|
"name": "@node-red/runtime",
|
||||||
"version": "4.0.2",
|
"version": "4.0.3",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"main": "./lib/index.js",
|
"main": "./lib/index.js",
|
||||||
"repository": {
|
"repository": {
|
||||||
@ -16,11 +16,11 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@node-red/registry": "4.0.2",
|
"@node-red/registry": "4.0.3",
|
||||||
"@node-red/util": "4.0.2",
|
"@node-red/util": "4.0.3",
|
||||||
"async-mutex": "0.5.0",
|
"async-mutex": "0.5.0",
|
||||||
"clone": "2.1.2",
|
"clone": "2.1.2",
|
||||||
"express": "4.19.2",
|
"express": "4.21.0",
|
||||||
"fs-extra": "11.2.0",
|
"fs-extra": "11.2.0",
|
||||||
"json-stringify-safe": "5.0.1",
|
"json-stringify-safe": "5.0.1",
|
||||||
"rfdc": "^1.3.1"
|
"rfdc": "^1.3.1"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@node-red/util",
|
"name": "@node-red/util",
|
||||||
"version": "4.0.2",
|
"version": "4.0.3",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
14
packages/node_modules/node-red/package.json
vendored
14
packages/node_modules/node-red/package.json
vendored
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "node-red",
|
"name": "node-red",
|
||||||
"version": "4.0.2",
|
"version": "4.0.3",
|
||||||
"description": "Low-code programming for event-driven applications",
|
"description": "Low-code programming for event-driven applications",
|
||||||
"homepage": "https://nodered.org",
|
"homepage": "https://nodered.org",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@ -31,16 +31,16 @@
|
|||||||
"flow"
|
"flow"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@node-red/editor-api": "4.0.2",
|
"@node-red/editor-api": "4.0.3",
|
||||||
"@node-red/runtime": "4.0.2",
|
"@node-red/runtime": "4.0.3",
|
||||||
"@node-red/util": "4.0.2",
|
"@node-red/util": "4.0.3",
|
||||||
"@node-red/nodes": "4.0.2",
|
"@node-red/nodes": "4.0.3",
|
||||||
"basic-auth": "2.0.1",
|
"basic-auth": "2.0.1",
|
||||||
"bcryptjs": "2.4.3",
|
"bcryptjs": "2.4.3",
|
||||||
"cors": "2.8.5",
|
"cors": "2.8.5",
|
||||||
"express": "4.19.2",
|
"express": "4.21.0",
|
||||||
"fs-extra": "11.2.0",
|
"fs-extra": "11.2.0",
|
||||||
"node-red-admin": "^4.0.0",
|
"node-red-admin": "^4.0.1",
|
||||||
"nopt": "5.0.0",
|
"nopt": "5.0.0",
|
||||||
"semver": "7.5.4"
|
"semver": "7.5.4"
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user