mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2026-02-13 06:02:57 +00:00
Compare commits
10 Commits
v2.13.7
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
099243aff7 | ||
|
|
011191f645 | ||
|
|
eeab425ea4 | ||
|
|
13fbc53591 | ||
|
|
b7402d47a0 | ||
|
|
21f63e3db3 | ||
|
|
232b5b759a | ||
|
|
054742539f | ||
|
|
2b6a617599 | ||
|
|
187d21a0d5 |
@@ -660,8 +660,8 @@ const internalCertificate = {
|
|||||||
* @param {Boolean} [throwExpired] Throw when the certificate is out of date
|
* @param {Boolean} [throwExpired] Throw when the certificate is out of date
|
||||||
*/
|
*/
|
||||||
getCertificateInfo: async (certificate, throwExpired) => {
|
getCertificateInfo: async (certificate, throwExpired) => {
|
||||||
try {
|
|
||||||
const filepath = await tempWrite(certificate, "/tmp");
|
const filepath = await tempWrite(certificate, "/tmp");
|
||||||
|
try {
|
||||||
const certData = await internalCertificate.getCertificateInfoFromFile(filepath, throwExpired);
|
const certData = await internalCertificate.getCertificateInfoFromFile(filepath, throwExpired);
|
||||||
fs.unlinkSync(filepath);
|
fs.unlinkSync(filepath);
|
||||||
return certData;
|
return certData;
|
||||||
|
|||||||
43
backend/migrations/20260131163528_trust_forwarded_proto.js
Normal file
43
backend/migrations/20260131163528_trust_forwarded_proto.js
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
import { migrate as logger } from "../logger.js";
|
||||||
|
|
||||||
|
const migrateName = "trust_forwarded_proto";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Migrate
|
||||||
|
*
|
||||||
|
* @see http://knexjs.org/#Schema
|
||||||
|
*
|
||||||
|
* @param {Object} knex
|
||||||
|
* @returns {Promise}
|
||||||
|
*/
|
||||||
|
const up = function (knex) {
|
||||||
|
logger.info(`[${migrateName}] Migrating Up...`);
|
||||||
|
|
||||||
|
return knex.schema
|
||||||
|
.alterTable('proxy_host', (table) => {
|
||||||
|
table.tinyint('trust_forwarded_proto').notNullable().defaultTo(0);
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
logger.info(`[${migrateName}] proxy_host Table altered`);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undo Migrate
|
||||||
|
*
|
||||||
|
* @param {Object} knex
|
||||||
|
* @returns {Promise}
|
||||||
|
*/
|
||||||
|
const down = function (knex) {
|
||||||
|
logger.info(`[${migrateName}] Migrating Down...`);
|
||||||
|
|
||||||
|
return knex.schema
|
||||||
|
.alterTable('proxy_host', (table) => {
|
||||||
|
table.dropColumn('trust_forwarded_proto');
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
logger.info(`[${migrateName}] proxy_host Table altered`);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export { up, down };
|
||||||
@@ -21,6 +21,7 @@ const boolFields = [
|
|||||||
"enabled",
|
"enabled",
|
||||||
"hsts_enabled",
|
"hsts_enabled",
|
||||||
"hsts_subdomains",
|
"hsts_subdomains",
|
||||||
|
"trust_forwarded_proto",
|
||||||
];
|
];
|
||||||
|
|
||||||
class ProxyHost extends Model {
|
class ProxyHost extends Model {
|
||||||
|
|||||||
@@ -22,7 +22,8 @@
|
|||||||
"enabled",
|
"enabled",
|
||||||
"locations",
|
"locations",
|
||||||
"hsts_enabled",
|
"hsts_enabled",
|
||||||
"hsts_subdomains"
|
"hsts_subdomains",
|
||||||
|
"trust_forwarded_proto"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
@@ -141,6 +142,11 @@
|
|||||||
"hsts_subdomains": {
|
"hsts_subdomains": {
|
||||||
"$ref": "../common.json#/properties/hsts_subdomains"
|
"$ref": "../common.json#/properties/hsts_subdomains"
|
||||||
},
|
},
|
||||||
|
"trust_forwarded_proto":{
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Trust the forwarded headers",
|
||||||
|
"example": false
|
||||||
|
},
|
||||||
"certificate": {
|
"certificate": {
|
||||||
"oneOf": [
|
"oneOf": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -58,7 +58,8 @@
|
|||||||
"enabled": true,
|
"enabled": true,
|
||||||
"locations": [],
|
"locations": [],
|
||||||
"hsts_enabled": false,
|
"hsts_enabled": false,
|
||||||
"hsts_subdomains": false
|
"hsts_subdomains": false,
|
||||||
|
"trust_forwarded_proto": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
"locations": [],
|
"locations": [],
|
||||||
"hsts_enabled": false,
|
"hsts_enabled": false,
|
||||||
"hsts_subdomains": false,
|
"hsts_subdomains": false,
|
||||||
|
"trust_forwarded_proto": false,
|
||||||
"owner": {
|
"owner": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2025-10-28T00:50:24.000Z",
|
"created_on": "2025-10-28T00:50:24.000Z",
|
||||||
|
|||||||
@@ -56,6 +56,9 @@
|
|||||||
"hsts_subdomains": {
|
"hsts_subdomains": {
|
||||||
"$ref": "../../../../components/proxy-host-object.json#/properties/hsts_subdomains"
|
"$ref": "../../../../components/proxy-host-object.json#/properties/hsts_subdomains"
|
||||||
},
|
},
|
||||||
|
"trust_forwarded_proto": {
|
||||||
|
"$ref": "../../../../components/proxy-host-object.json#/properties/trust_forwarded_proto"
|
||||||
|
},
|
||||||
"http2_support": {
|
"http2_support": {
|
||||||
"$ref": "../../../../components/proxy-host-object.json#/properties/http2_support"
|
"$ref": "../../../../components/proxy-host-object.json#/properties/http2_support"
|
||||||
},
|
},
|
||||||
@@ -122,6 +125,7 @@
|
|||||||
"locations": [],
|
"locations": [],
|
||||||
"hsts_enabled": false,
|
"hsts_enabled": false,
|
||||||
"hsts_subdomains": false,
|
"hsts_subdomains": false,
|
||||||
|
"trust_forwarded_proto": false,
|
||||||
"owner": {
|
"owner": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2025-10-28T00:50:24.000Z",
|
"created_on": "2025-10-28T00:50:24.000Z",
|
||||||
|
|||||||
@@ -48,6 +48,9 @@
|
|||||||
"hsts_subdomains": {
|
"hsts_subdomains": {
|
||||||
"$ref": "../../../components/proxy-host-object.json#/properties/hsts_subdomains"
|
"$ref": "../../../components/proxy-host-object.json#/properties/hsts_subdomains"
|
||||||
},
|
},
|
||||||
|
"trust_forwarded_proto": {
|
||||||
|
"$ref": "../../../components/proxy-host-object.json#/properties/trust_forwarded_proto"
|
||||||
|
},
|
||||||
"http2_support": {
|
"http2_support": {
|
||||||
"$ref": "../../../components/proxy-host-object.json#/properties/http2_support"
|
"$ref": "../../../components/proxy-host-object.json#/properties/http2_support"
|
||||||
},
|
},
|
||||||
@@ -119,6 +122,7 @@
|
|||||||
"locations": [],
|
"locations": [],
|
||||||
"hsts_enabled": false,
|
"hsts_enabled": false,
|
||||||
"hsts_subdomains": false,
|
"hsts_subdomains": false,
|
||||||
|
"trust_forwarded_proto": false,
|
||||||
"certificate": null,
|
"certificate": null,
|
||||||
"owner": {
|
"owner": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
{% if certificate and certificate_id > 0 -%}
|
{% if certificate and certificate_id > 0 -%}
|
||||||
{% if ssl_forced == 1 or ssl_forced == true %}
|
{% if ssl_forced == 1 or ssl_forced == true %}
|
||||||
# Force SSL
|
# Force SSL
|
||||||
|
{% if trust_forwarded_proto == true %}
|
||||||
|
set $trust_forwarded_proto "T";
|
||||||
|
{% else %}
|
||||||
|
set $trust_forwarded_proto "F";
|
||||||
|
{% endif %}
|
||||||
include conf.d/include/force-ssl.conf;
|
include conf.d/include/force-ssl.conf;
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -5,9 +5,28 @@ if ($scheme = "http") {
|
|||||||
if ($request_uri = /.well-known/acme-challenge/test-challenge) {
|
if ($request_uri = /.well-known/acme-challenge/test-challenge) {
|
||||||
set $test "${test}T";
|
set $test "${test}T";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Check if the ssl staff has been handled
|
||||||
|
set $test_ssl_handled "";
|
||||||
|
if ($trust_forwarded_proto = "") {
|
||||||
|
set $trust_forwarded_proto "F";
|
||||||
|
}
|
||||||
|
if ($trust_forwarded_proto = "T") {
|
||||||
|
set $test_ssl_handled "${test_ssl_handled}T";
|
||||||
|
}
|
||||||
if ($http_x_forwarded_proto = "https") {
|
if ($http_x_forwarded_proto = "https") {
|
||||||
|
set $test_ssl_handled "${test_ssl_handled}S";
|
||||||
|
}
|
||||||
|
if ($http_x_forwarded_scheme = "https") {
|
||||||
|
set $test_ssl_handled "${test_ssl_handled}S";
|
||||||
|
}
|
||||||
|
if ($test_ssl_handled = "TSS") {
|
||||||
|
set $test_ssl_handled "TS";
|
||||||
|
}
|
||||||
|
if ($test_ssl_handled = "TS") {
|
||||||
set $test "${test}S";
|
set $test "${test}S";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($test = H) {
|
if ($test = H) {
|
||||||
return 301 https://$host$request_uri;
|
return 301 https://$host$request_uri;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
add_header X-Served-By $host;
|
add_header X-Served-By $host;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Forwarded-Scheme $scheme;
|
proxy_set_header X-Forwarded-Scheme $x_forwarded_scheme;
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $x_forwarded_proto;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_pass $forward_scheme://$server:$port$request_uri;
|
proxy_pass $forward_scheme://$server:$port$request_uri;
|
||||||
|
|||||||
@@ -57,6 +57,18 @@ http {
|
|||||||
default http;
|
default http;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Handle upstream X-Forwarded-Proto and X-Forwarded-Scheme header
|
||||||
|
map $http_x_forwarded_proto $x_forwarded_proto {
|
||||||
|
"http" "http";
|
||||||
|
"https" "https";
|
||||||
|
default $scheme;
|
||||||
|
}
|
||||||
|
map $http_x_forwarded_scheme $x_forwarded_scheme {
|
||||||
|
"http" "http";
|
||||||
|
"https" "https";
|
||||||
|
default $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
# Real IP Determination
|
# Real IP Determination
|
||||||
|
|
||||||
# Local subnets:
|
# Local subnets:
|
||||||
|
|||||||
@@ -127,6 +127,7 @@ export interface ProxyHost {
|
|||||||
locations?: ProxyLocation[];
|
locations?: ProxyLocation[];
|
||||||
hstsEnabled: boolean;
|
hstsEnabled: boolean;
|
||||||
hstsSubdomains: boolean;
|
hstsSubdomains: boolean;
|
||||||
|
trustForwardedProto: boolean;
|
||||||
// Expansions:
|
// Expansions:
|
||||||
owner?: User;
|
owner?: User;
|
||||||
accessList?: AccessList;
|
accessList?: AccessList;
|
||||||
|
|||||||
@@ -5,17 +5,18 @@ import { T } from "src/locale";
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
forHttp?: boolean; // the sslForced, http2Support, hstsEnabled, hstsSubdomains fields
|
forHttp?: boolean; // the sslForced, http2Support, hstsEnabled, hstsSubdomains fields
|
||||||
|
forProxyHost?: boolean; // the advanced fields
|
||||||
forceDNSForNew?: boolean;
|
forceDNSForNew?: boolean;
|
||||||
requireDomainNames?: boolean; // used for streams
|
requireDomainNames?: boolean; // used for streams
|
||||||
color?: string;
|
color?: string;
|
||||||
}
|
}
|
||||||
export function SSLOptionsFields({ forHttp = true, forceDNSForNew, requireDomainNames, color = "bg-cyan" }: Props) {
|
export function SSLOptionsFields({ forHttp = true, forProxyHost = false, forceDNSForNew, requireDomainNames, color = "bg-cyan" }: Props) {
|
||||||
const { values, setFieldValue } = useFormikContext();
|
const { values, setFieldValue } = useFormikContext();
|
||||||
const v: any = values || {};
|
const v: any = values || {};
|
||||||
|
|
||||||
const newCertificate = v?.certificateId === "new";
|
const newCertificate = v?.certificateId === "new";
|
||||||
const hasCertificate = newCertificate || (v?.certificateId && v?.certificateId > 0);
|
const hasCertificate = newCertificate || (v?.certificateId && v?.certificateId > 0);
|
||||||
const { sslForced, http2Support, hstsEnabled, hstsSubdomains, meta } = v;
|
const { sslForced, http2Support, hstsEnabled, hstsSubdomains, trustForwardedProto, meta } = v;
|
||||||
const { dnsChallenge } = meta || {};
|
const { dnsChallenge } = meta || {};
|
||||||
|
|
||||||
if (forceDNSForNew && newCertificate && !dnsChallenge) {
|
if (forceDNSForNew && newCertificate && !dnsChallenge) {
|
||||||
@@ -115,6 +116,34 @@ export function SSLOptionsFields({ forHttp = true, forceDNSForNew, requireDomain
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const getHttpAdvancedOptions = () =>(
|
||||||
|
<div>
|
||||||
|
<details>
|
||||||
|
<summary className="mb-1"><T id="domains.advanced" /></summary>
|
||||||
|
<div className="row">
|
||||||
|
<div className="col-12">
|
||||||
|
<Field name="trustForwardedProto">
|
||||||
|
{({ field }: any) => (
|
||||||
|
<label className="form-check form-switch mt-1">
|
||||||
|
<input
|
||||||
|
className={trustForwardedProto ? toggleEnabled : toggleClasses}
|
||||||
|
type="checkbox"
|
||||||
|
checked={!!trustForwardedProto}
|
||||||
|
onChange={(e) => handleToggleChange(e, field.name)}
|
||||||
|
disabled={!hasCertificate || !sslForced}
|
||||||
|
/>
|
||||||
|
<span className="form-check-label">
|
||||||
|
<T id="domains.trust-forwarded-proto" />
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
)}
|
||||||
|
</Field>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{forHttp ? getHttpOptions() : null}
|
{forHttp ? getHttpOptions() : null}
|
||||||
@@ -140,6 +169,7 @@ export function SSLOptionsFields({ forHttp = true, forceDNSForNew, requireDomain
|
|||||||
{dnsChallenge ? <DNSProviderFields showBoundaryBox /> : null}
|
{dnsChallenge ? <DNSProviderFields showBoundaryBox /> : null}
|
||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
|
{forProxyHost && forHttp ? getHttpAdvancedOptions() : null}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ const fetchProxyHost = (id: number | "new") => {
|
|||||||
enabled: true,
|
enabled: true,
|
||||||
hstsEnabled: false,
|
hstsEnabled: false,
|
||||||
hstsSubdomains: false,
|
hstsSubdomains: false,
|
||||||
|
trustForwardedProto: false,
|
||||||
} as ProxyHost);
|
} as ProxyHost);
|
||||||
}
|
}
|
||||||
return getProxyHost(id, ["owner"]);
|
return getProxyHost(id, ["owner"]);
|
||||||
|
|||||||
@@ -347,6 +347,9 @@
|
|||||||
"domain-names.wildcards-not-supported": {
|
"domain-names.wildcards-not-supported": {
|
||||||
"defaultMessage": "Wildcards not supported for this CA"
|
"defaultMessage": "Wildcards not supported for this CA"
|
||||||
},
|
},
|
||||||
|
"domains.advanced": {
|
||||||
|
"defaultMessage": "Advanced"
|
||||||
|
},
|
||||||
"domains.force-ssl": {
|
"domains.force-ssl": {
|
||||||
"defaultMessage": "Force SSL"
|
"defaultMessage": "Force SSL"
|
||||||
},
|
},
|
||||||
@@ -359,6 +362,9 @@
|
|||||||
"domains.http2-support": {
|
"domains.http2-support": {
|
||||||
"defaultMessage": "HTTP/2 Support"
|
"defaultMessage": "HTTP/2 Support"
|
||||||
},
|
},
|
||||||
|
"domains.trust-forwarded-proto": {
|
||||||
|
"defaultMessage": "Trust Upstream Forwarded Proto Headers"
|
||||||
|
},
|
||||||
"domains.use-dns": {
|
"domains.use-dns": {
|
||||||
"defaultMessage": "Use DNS Challenge"
|
"defaultMessage": "Use DNS Challenge"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -275,6 +275,9 @@
|
|||||||
"domain-names.wildcards-not-supported": {
|
"domain-names.wildcards-not-supported": {
|
||||||
"defaultMessage": "此 CA 不支持通配符"
|
"defaultMessage": "此 CA 不支持通配符"
|
||||||
},
|
},
|
||||||
|
"domains.advanced": {
|
||||||
|
"defaultMessage": "高级选项"
|
||||||
|
},
|
||||||
"domains.force-ssl": {
|
"domains.force-ssl": {
|
||||||
"defaultMessage": "强制 SSL"
|
"defaultMessage": "强制 SSL"
|
||||||
},
|
},
|
||||||
@@ -287,6 +290,9 @@
|
|||||||
"domains.http2-support": {
|
"domains.http2-support": {
|
||||||
"defaultMessage": "HTTP/2 支持"
|
"defaultMessage": "HTTP/2 支持"
|
||||||
},
|
},
|
||||||
|
"domains.trust-forwarded-proto": {
|
||||||
|
"defaultMessage": "信任上游代理传递的协议类型头"
|
||||||
|
},
|
||||||
"domains.use-dns": {
|
"domains.use-dns": {
|
||||||
"defaultMessage": "使用DNS验证"
|
"defaultMessage": "使用DNS验证"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ const ProxyHostModal = EasyModal.create(({ id, visible, remove }: Props) => {
|
|||||||
http2Support: data?.http2Support || false,
|
http2Support: data?.http2Support || false,
|
||||||
hstsEnabled: data?.hstsEnabled || false,
|
hstsEnabled: data?.hstsEnabled || false,
|
||||||
hstsSubdomains: data?.hstsSubdomains || false,
|
hstsSubdomains: data?.hstsSubdomains || false,
|
||||||
|
trustForwardedProto: data?.trustForwardedProto || false,
|
||||||
// Advanced tab
|
// Advanced tab
|
||||||
advancedConfig: data?.advancedConfig || "",
|
advancedConfig: data?.advancedConfig || "",
|
||||||
meta: data?.meta || {},
|
meta: data?.meta || {},
|
||||||
@@ -339,7 +340,7 @@ const ProxyHostModal = EasyModal.create(({ id, visible, remove }: Props) => {
|
|||||||
label="ssl-certificate"
|
label="ssl-certificate"
|
||||||
allowNew
|
allowNew
|
||||||
/>
|
/>
|
||||||
<SSLOptionsFields color="bg-lime" />
|
<SSLOptionsFields color="bg-lime" forProxyHost={true} />
|
||||||
</div>
|
</div>
|
||||||
<div className="tab-pane" id="tab-advanced" role="tabpanel">
|
<div className="tab-pane" id="tab-advanced" role="tabpanel">
|
||||||
<NginxConfigField />
|
<NginxConfigField />
|
||||||
|
|||||||
104
test/yarn.lock
104
test/yarn.lock
@@ -774,7 +774,7 @@ decamelize@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
|
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
|
||||||
integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
|
integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
|
||||||
|
|
||||||
deep-is@^0.1.3, deep-is@~0.1.3:
|
deep-is@^0.1.3:
|
||||||
version "0.1.3"
|
version "0.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
||||||
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
|
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
|
||||||
@@ -877,15 +877,14 @@ escape-string-regexp@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
|
||||||
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
|
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
|
||||||
|
|
||||||
escodegen@^1.8.1:
|
escodegen@^2.1.0:
|
||||||
version "1.12.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541"
|
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17"
|
||||||
integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==
|
integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==
|
||||||
dependencies:
|
dependencies:
|
||||||
esprima "^3.1.3"
|
esprima "^4.0.1"
|
||||||
estraverse "^4.2.0"
|
estraverse "^5.2.0"
|
||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
optionator "^0.8.1"
|
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
source-map "~0.6.1"
|
source-map "~0.6.1"
|
||||||
|
|
||||||
@@ -973,17 +972,12 @@ espree@^10.0.1, espree@^10.4.0:
|
|||||||
acorn-jsx "^5.3.2"
|
acorn-jsx "^5.3.2"
|
||||||
eslint-visitor-keys "^4.2.1"
|
eslint-visitor-keys "^4.2.1"
|
||||||
|
|
||||||
esprima@1.2.2:
|
esprima@1.2.5:
|
||||||
version "1.2.2"
|
version "1.2.5"
|
||||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.2.tgz#76a0fd66fcfe154fd292667dc264019750b1657b"
|
resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9"
|
||||||
integrity sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=
|
integrity sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==
|
||||||
|
|
||||||
esprima@^3.1.3:
|
esprima@^4.0.0, esprima@^4.0.1:
|
||||||
version "3.1.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
|
|
||||||
integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
|
|
||||||
|
|
||||||
esprima@^4.0.0:
|
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
|
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
|
||||||
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
||||||
@@ -1002,11 +996,6 @@ esrecurse@^4.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
estraverse "^5.2.0"
|
estraverse "^5.2.0"
|
||||||
|
|
||||||
estraverse@^4.2.0:
|
|
||||||
version "4.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
|
|
||||||
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
|
|
||||||
|
|
||||||
estraverse@^5.1.0:
|
estraverse@^5.1.0:
|
||||||
version "5.2.0"
|
version "5.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
|
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
|
||||||
@@ -1085,7 +1074,7 @@ fast-json-stable-stringify@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
|
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
|
||||||
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
|
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
|
||||||
|
|
||||||
fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
|
fast-levenshtein@^2.0.6:
|
||||||
version "2.0.6"
|
version "2.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
|
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
|
||||||
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
|
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
|
||||||
@@ -1516,13 +1505,13 @@ jsonfile@^6.0.1:
|
|||||||
graceful-fs "^4.1.6"
|
graceful-fs "^4.1.6"
|
||||||
|
|
||||||
jsonpath@^1.1.1:
|
jsonpath@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/jsonpath/-/jsonpath-1.1.1.tgz#0ca1ed8fb65bb3309248cc9d5466d12d5b0b9901"
|
resolved "https://registry.yarnpkg.com/jsonpath/-/jsonpath-1.2.1.tgz#2b74a4bcc78948e43e33ac971138ce0c68bce701"
|
||||||
integrity sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==
|
integrity sha512-Jl6Jhk0jG+kP3yk59SSeGq7LFPR4JQz1DU0K+kXTysUhMostbhU3qh5mjTuf0PqFcXpAT7kvmMt9WxV10NyIgQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
esprima "1.2.2"
|
esprima "1.2.5"
|
||||||
static-eval "2.0.2"
|
static-eval "2.1.1"
|
||||||
underscore "1.12.1"
|
underscore "1.13.6"
|
||||||
|
|
||||||
jsprim@^2.0.2:
|
jsprim@^2.0.2:
|
||||||
version "2.0.2"
|
version "2.0.2"
|
||||||
@@ -1549,14 +1538,6 @@ levn@^0.4.1:
|
|||||||
prelude-ls "^1.2.1"
|
prelude-ls "^1.2.1"
|
||||||
type-check "~0.4.0"
|
type-check "~0.4.0"
|
||||||
|
|
||||||
levn@~0.3.0:
|
|
||||||
version "0.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
|
|
||||||
integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
|
|
||||||
dependencies:
|
|
||||||
prelude-ls "~1.1.2"
|
|
||||||
type-check "~0.3.2"
|
|
||||||
|
|
||||||
listr2@^3.8.3:
|
listr2@^3.8.3:
|
||||||
version "3.14.0"
|
version "3.14.0"
|
||||||
resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e"
|
resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e"
|
||||||
@@ -1781,18 +1762,6 @@ openapi-types@^12.1.3:
|
|||||||
resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3"
|
resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3"
|
||||||
integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==
|
integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==
|
||||||
|
|
||||||
optionator@^0.8.1:
|
|
||||||
version "0.8.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
|
|
||||||
integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
|
|
||||||
dependencies:
|
|
||||||
deep-is "~0.1.3"
|
|
||||||
fast-levenshtein "~2.0.6"
|
|
||||||
levn "~0.3.0"
|
|
||||||
prelude-ls "~1.1.2"
|
|
||||||
type-check "~0.3.2"
|
|
||||||
word-wrap "~1.2.3"
|
|
||||||
|
|
||||||
optionator@^0.9.3:
|
optionator@^0.9.3:
|
||||||
version "0.9.4"
|
version "0.9.4"
|
||||||
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
|
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
|
||||||
@@ -1886,11 +1855,6 @@ prelude-ls@^1.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||||
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
|
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
|
||||||
|
|
||||||
prelude-ls@~1.1.2:
|
|
||||||
version "1.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
|
||||||
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
|
|
||||||
|
|
||||||
pretty-bytes@^5.6.0:
|
pretty-bytes@^5.6.0:
|
||||||
version "5.6.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
|
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
|
||||||
@@ -2117,12 +2081,12 @@ sshpk@^1.18.0:
|
|||||||
safer-buffer "^2.0.2"
|
safer-buffer "^2.0.2"
|
||||||
tweetnacl "~0.14.0"
|
tweetnacl "~0.14.0"
|
||||||
|
|
||||||
static-eval@2.0.2:
|
static-eval@2.1.1:
|
||||||
version "2.0.2"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.2.tgz#2d1759306b1befa688938454c546b7871f806a42"
|
resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.1.1.tgz#71ac6a13aa32b9e14c5b5f063c362176b0d584ba"
|
||||||
integrity sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==
|
integrity sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==
|
||||||
dependencies:
|
dependencies:
|
||||||
escodegen "^1.8.1"
|
escodegen "^2.1.0"
|
||||||
|
|
||||||
"string-width-cjs@npm:string-width@^4.2.0":
|
"string-width-cjs@npm:string-width@^4.2.0":
|
||||||
version "4.2.3"
|
version "4.2.3"
|
||||||
@@ -2291,13 +2255,6 @@ type-check@^0.4.0, type-check@~0.4.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
prelude-ls "^1.2.1"
|
prelude-ls "^1.2.1"
|
||||||
|
|
||||||
type-check@~0.3.2:
|
|
||||||
version "0.3.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
|
|
||||||
integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
|
|
||||||
dependencies:
|
|
||||||
prelude-ls "~1.1.2"
|
|
||||||
|
|
||||||
type-fest@^0.21.3:
|
type-fest@^0.21.3:
|
||||||
version "0.21.3"
|
version "0.21.3"
|
||||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
|
||||||
@@ -2308,10 +2265,10 @@ type-fest@^0.8.0:
|
|||||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
|
||||||
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
|
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
|
||||||
|
|
||||||
underscore@1.12.1:
|
underscore@1.13.6:
|
||||||
version "1.12.1"
|
version "1.13.6"
|
||||||
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e"
|
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441"
|
||||||
integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==
|
integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==
|
||||||
|
|
||||||
universalify@^2.0.0:
|
universalify@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
@@ -2361,11 +2318,6 @@ word-wrap@^1.2.5:
|
|||||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
|
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
|
||||||
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
|
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
|
||||||
|
|
||||||
word-wrap@~1.2.3:
|
|
||||||
version "1.2.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f"
|
|
||||||
integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==
|
|
||||||
|
|
||||||
workerpool@^9.2.0:
|
workerpool@^9.2.0:
|
||||||
version "9.3.2"
|
version "9.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-9.3.2.tgz#4c045a8b437ae1bc70c646af11929a8b4d238656"
|
resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-9.3.2.tgz#4c045a8b437ae1bc70c646af11929a8b4d238656"
|
||||||
|
|||||||
Reference in New Issue
Block a user