xovris 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/xovris.mjs +0 -0
- package/dist/cli.js +413 -24
- package/dist/{code-DsDiCUXb.js → code-DKbqSLWT.js} +11 -5
- package/dist/{collector-join-CwjwINuL.js → collector-join-CkBmhc2w.js} +1 -1
- package/dist/{findings-BHh24V38.js → findings-CcqH4Q2I.js} +1 -1
- package/dist/{finishing-Dsc2jn0-.js → finishing-CZ013_fT.js} +1 -1
- package/dist/{gated-write-DRftDST4.js → gated-write-B8Aln6GU.js} +1 -1
- package/dist/{hunt-BmQxPIL8.js → hunt-Ce77c8DT.js} +2 -2
- package/dist/{languages-DhPS_td-.js → languages-9JrWtbQN.js} +1 -1
- package/dist/{merge-BK7G5i5Q.js → merge-B-lFy27Y.js} +3 -3
- package/dist/{review-ui-DsFuGF7B.js → review-ui-DGEc-h8N.js} +1 -1
- package/dist/{sourcemaps-tbnp_n01.js → sourcemaps-B7Knrrs4.js} +2 -2
- package/dist/{src-DPO9_Gtz.js → src-CZstFB4j.js} +1812 -74
- package/dist/{trace-DoQjPlBv.js → trace-1RWrsTAT.js} +1 -1
- package/package.json +16 -16
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
1
|
+
import { builtinModules, createRequire } from "node:module";
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import { basename, dirname, extname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
4
4
|
import { cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
|
|
@@ -263,7 +263,7 @@ function sideTexts(f) {
|
|
|
263
263
|
|
|
264
264
|
//#endregion
|
|
265
265
|
//#region ../review/src/rules.ts
|
|
266
|
-
const JS$
|
|
266
|
+
const JS$5 = /\.(?:m?[jt]sx?|c[jt]s)$/;
|
|
267
267
|
/** A for loop from 0 while its index is at most a list's length: its index and the list. */
|
|
268
268
|
const LOOP_PAST_END = /\bfor\s*\(\s*(?:let|var)?\s*([A-Za-z_$][\w$]*)\s*=\s*0\s*;\s*\1\s*<=\s*([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\.length\s*;/;
|
|
269
269
|
const TS = /\.(?:m?tsx?|cts)$/;
|
|
@@ -507,7 +507,7 @@ const RULES = [
|
|
|
507
507
|
severity: "major",
|
|
508
508
|
category: "security",
|
|
509
509
|
aliases: ["math.random", "insecure random"],
|
|
510
|
-
files: JS$
|
|
510
|
+
files: JS$5,
|
|
511
511
|
match: (l) => /Math\.random\(\)/.test(l) && /(token|secret|password|passwd|nonce|otp|salt|session|apikey|api_key|reset)/i.test(l),
|
|
512
512
|
why: "Math.random is predictable; a token made from it can be guessed.",
|
|
513
513
|
suggestion: "Use crypto.randomUUID() or crypto.getRandomValues / randomBytes."
|
|
@@ -560,7 +560,7 @@ const RULES = [
|
|
|
560
560
|
severity: "minor",
|
|
561
561
|
category: "stability",
|
|
562
562
|
aliases: ["debugger"],
|
|
563
|
-
files: JS$
|
|
563
|
+
files: JS$5,
|
|
564
564
|
match: (l) => /^\s*debugger\s*;?\s*$/.test(l),
|
|
565
565
|
fix: () => null,
|
|
566
566
|
why: "It pauses the app wherever developer tools are open.",
|
|
@@ -572,7 +572,7 @@ const RULES = [
|
|
|
572
572
|
severity: "major",
|
|
573
573
|
category: "stability",
|
|
574
574
|
aliases: ["empty catch", "swallowed error"],
|
|
575
|
-
files: JS$
|
|
575
|
+
files: JS$5,
|
|
576
576
|
match: (l) => /\bcatch\s*(\([^)]*\))?\s*\{\s*\}/.test(l) || /\.catch\(\s*\(\s*\w*\s*\)\s*=>\s*\{\s*\}\s*\)/.test(l),
|
|
577
577
|
why: "A failure here disappears without a trace; the next error happens somewhere it is harder to explain.",
|
|
578
578
|
suggestion: "Handle it, report it, or let it reach the caller."
|
|
@@ -607,7 +607,7 @@ const RULES = [
|
|
|
607
607
|
severity: "minor",
|
|
608
608
|
category: "stability",
|
|
609
609
|
aliases: ["process.exit"],
|
|
610
|
-
files: JS$
|
|
610
|
+
files: JS$5,
|
|
611
611
|
match: (l) => /\bprocess\.exit\s*\(/.test(l),
|
|
612
612
|
why: "Ending the process from inside a module skips cleanup and kills unrelated work.",
|
|
613
613
|
suggestion: "Throw or return an error and let the entry point decide to exit."
|
|
@@ -629,7 +629,7 @@ const RULES = [
|
|
|
629
629
|
"==",
|
|
630
630
|
"double equals"
|
|
631
631
|
],
|
|
632
|
-
files: JS$
|
|
632
|
+
files: JS$5,
|
|
633
633
|
match: (l) => looseOp(l) !== null,
|
|
634
634
|
fix: (l) => {
|
|
635
635
|
const o = looseOp(l);
|
|
@@ -644,7 +644,7 @@ const RULES = [
|
|
|
644
644
|
severity: "minor",
|
|
645
645
|
category: "correctness",
|
|
646
646
|
aliases: ["parseint", "radix"],
|
|
647
|
-
files: JS$
|
|
647
|
+
files: JS$5,
|
|
648
648
|
match: (l) => /\bparseInt\(\s*[^,()]+\)/.test(l),
|
|
649
649
|
fix: (l) => l.replace(/\bparseInt\(\s*([^,()]+?)\s*\)/, "parseInt($1, 10)"),
|
|
650
650
|
why: "Without a base, text such as \"0x1A\" is read in another base.",
|
|
@@ -656,7 +656,7 @@ const RULES = [
|
|
|
656
656
|
severity: "major",
|
|
657
657
|
category: "correctness",
|
|
658
658
|
aliases: ["typeof undefined"],
|
|
659
|
-
files: JS$
|
|
659
|
+
files: JS$5,
|
|
660
660
|
match: (l) => /typeof\s+[\w.$[\]]+\s*[!=]==?\s*undefined\b/.test(l),
|
|
661
661
|
fix: (l) => l.replace(/(typeof\s+[\w.$[\]]+\s*[!=]==?\s*)undefined\b/, "$1'undefined'"),
|
|
662
662
|
why: "typeof always gives a string, so comparing it with undefined is never true.",
|
|
@@ -668,7 +668,7 @@ const RULES = [
|
|
|
668
668
|
severity: "major",
|
|
669
669
|
category: "correctness",
|
|
670
670
|
aliases: ["nan"],
|
|
671
|
-
files: JS$
|
|
671
|
+
files: JS$5,
|
|
672
672
|
match: (l) => /[\w.$\])]\s*[!=]==?\s*NaN\b|\bNaN\s*[!=]==?\s*[\w.$]/.test(l),
|
|
673
673
|
fix: (l) => {
|
|
674
674
|
const m = /([\w.$[\]]+)\s*(===?|!==?)\s*NaN\b/.exec(l) ?? /\bNaN\s*(===?|!==?)\s*([\w.$[\]]+)/.exec(l);
|
|
@@ -685,7 +685,7 @@ const RULES = [
|
|
|
685
685
|
severity: "major",
|
|
686
686
|
category: "correctness",
|
|
687
687
|
aliases: ["off by one", "last index"],
|
|
688
|
-
files: JS$
|
|
688
|
+
files: JS$5,
|
|
689
689
|
match: (l) => /([\w.$]+)\[\1\.length\]/.test(l),
|
|
690
690
|
fix: (l) => l.replace(/([\w.$]+)\[\1\.length\]/, "$1[$1.length - 1]"),
|
|
691
691
|
why: "xs[xs.length] is always undefined; the last item is at length - 1.",
|
|
@@ -701,7 +701,7 @@ const RULES = [
|
|
|
701
701
|
"loop bound",
|
|
702
702
|
"last index"
|
|
703
703
|
],
|
|
704
|
-
files: JS$
|
|
704
|
+
files: JS$5,
|
|
705
705
|
match: (l, c) => {
|
|
706
706
|
const m = LOOP_PAST_END.exec(l);
|
|
707
707
|
if (!m) return false;
|
|
@@ -718,7 +718,7 @@ const RULES = [
|
|
|
718
718
|
severity: "major",
|
|
719
719
|
category: "correctness",
|
|
720
720
|
aliases: ["assignment in condition"],
|
|
721
|
-
files: JS$
|
|
721
|
+
files: JS$5,
|
|
722
722
|
match: (l) => /\b(if|while)\s*\(\s*[\w.$[\]]+\s=(?!=)\s*[^=]/.test(l),
|
|
723
723
|
why: "The condition assigns and then tests the new value, so the branch runs whenever the value is truthy.",
|
|
724
724
|
suggestion: "Use === to compare."
|
|
@@ -729,7 +729,7 @@ const RULES = [
|
|
|
729
729
|
severity: "major",
|
|
730
730
|
category: "correctness",
|
|
731
731
|
aliases: ["async foreach"],
|
|
732
|
-
files: JS$
|
|
732
|
+
files: JS$5,
|
|
733
733
|
match: (l) => /\.forEach\(\s*async\b/.test(l),
|
|
734
734
|
why: "forEach ignores the promises, so the code after it runs before the work is done and errors go unhandled.",
|
|
735
735
|
suggestion: "Use for...of with await, or await Promise.all(items.map(...))."
|
|
@@ -866,7 +866,7 @@ const RULES = [
|
|
|
866
866
|
severity: "trivial",
|
|
867
867
|
category: "performance",
|
|
868
868
|
aliases: ["json clone"],
|
|
869
|
-
files: JS$
|
|
869
|
+
files: JS$5,
|
|
870
870
|
match: (l) => /JSON\.parse\(\s*JSON\.stringify\(/.test(l),
|
|
871
871
|
why: "It is slow on large objects and silently drops dates, maps, undefined and functions.",
|
|
872
872
|
suggestion: "Use structuredClone(value)."
|
|
@@ -930,7 +930,7 @@ const RULES = [
|
|
|
930
930
|
"console logs",
|
|
931
931
|
"logging"
|
|
932
932
|
],
|
|
933
|
-
files: JS$
|
|
933
|
+
files: JS$5,
|
|
934
934
|
match: (l) => /^\s*console\.(log|debug|trace)\(.*\);?\s*$/.test(l) && balanced(l),
|
|
935
935
|
fix: () => null,
|
|
936
936
|
why: "Debug output leaks into the browser console or server logs.",
|
|
@@ -1282,10 +1282,10 @@ function linkedIssues(...texts) {
|
|
|
1282
1282
|
/** Calls the change adds from one module into another it imports, as a Mermaid sequence diagram (null when there are none). */
|
|
1283
1283
|
function sequenceDiagram(files, contents = {}) {
|
|
1284
1284
|
const arrows = [];
|
|
1285
|
-
const parts$
|
|
1285
|
+
const parts$2 = /* @__PURE__ */ new Map();
|
|
1286
1286
|
const alias = (p$1) => {
|
|
1287
|
-
if (!parts$
|
|
1288
|
-
return parts$
|
|
1287
|
+
if (!parts$2.has(p$1)) parts$2.set(p$1, `P${parts$2.size + 1}`);
|
|
1288
|
+
return parts$2.get(p$1);
|
|
1289
1289
|
};
|
|
1290
1290
|
for (const f of files) {
|
|
1291
1291
|
if (!/\.(m?[jt]sx?|c[jt]s)$/.test(f.path) || TEST_PATH.test(f.path)) continue;
|
|
@@ -1313,7 +1313,7 @@ function sequenceDiagram(files, contents = {}) {
|
|
|
1313
1313
|
if (!arrows.length) return null;
|
|
1314
1314
|
return [
|
|
1315
1315
|
"sequenceDiagram",
|
|
1316
|
-
...[...parts$
|
|
1316
|
+
...[...parts$2].map(([p$1, a]) => ` participant ${a} as ${p$1}`),
|
|
1317
1317
|
...arrows.slice(0, 12)
|
|
1318
1318
|
].join("\n");
|
|
1319
1319
|
}
|
|
@@ -1850,9 +1850,9 @@ const day = (iso) => iso.slice(0, 10);
|
|
|
1850
1850
|
* Each assumption that is not true where the code runs right now, with the reading that says so. A kind with no reading says
|
|
1851
1851
|
* nothing: Xovris never guesses what production holds.
|
|
1852
1852
|
*/
|
|
1853
|
-
function assumedFindings(files, live, zones = [], now = /* @__PURE__ */ new Date()) {
|
|
1853
|
+
function assumedFindings(files, live$1, zones = [], now = /* @__PURE__ */ new Date()) {
|
|
1854
1854
|
const out = [];
|
|
1855
|
-
const read = live ? `read ${live.at} from ${live.source}` : "";
|
|
1855
|
+
const read = live$1 ? `read ${live$1.at} from ${live$1.source}` : "";
|
|
1856
1856
|
const add = (a, rule, severity, category, title, reading, why, suggestion, key = "") => {
|
|
1857
1857
|
out.push({
|
|
1858
1858
|
id: findingId(`assumes.${rule}`, a.file, `${a.what}|${key}`),
|
|
@@ -1870,18 +1870,18 @@ function assumedFindings(files, live, zones = [], now = /* @__PURE__ */ new Date
|
|
|
1870
1870
|
ref: `live:${a.kind}`
|
|
1871
1871
|
});
|
|
1872
1872
|
};
|
|
1873
|
-
for (const a of assumptionsOf(files)) if (a.kind === "variable" && live?.env && !live.env.includes(a.what)) add(a, "variable", "major", "stability", `${a.what} is not set where this code runs`, `${live.env.length} variable${live.env.length === 1 ? " is" : "s are"} set and none is called ${a.what} (${read})`, "The line reads a variable that production does not have, so it gets nothing where it expects a value - and the code that follows runs on that.", `Set ${a.what} where the code runs before this merges, or give the line what to do when it is missing.`);
|
|
1874
|
-
else if (a.kind === "table" && live?.schema) {
|
|
1875
|
-
const tables = Object.keys(live.schema);
|
|
1873
|
+
for (const a of assumptionsOf(files)) if (a.kind === "variable" && live$1?.env && !live$1.env.includes(a.what)) add(a, "variable", "major", "stability", `${a.what} is not set where this code runs`, `${live$1.env.length} variable${live$1.env.length === 1 ? " is" : "s are"} set and none is called ${a.what} (${read})`, "The line reads a variable that production does not have, so it gets nothing where it expects a value - and the code that follows runs on that.", `Set ${a.what} where the code runs before this merges, or give the line what to do when it is missing.`);
|
|
1874
|
+
else if (a.kind === "table" && live$1?.schema) {
|
|
1875
|
+
const tables = Object.keys(live$1.schema);
|
|
1876
1876
|
const t = tables.find((x) => x.toLowerCase() === a.what);
|
|
1877
|
-
const missing = t ? (a.columns ?? []).filter((c) => !live.schema[t].some((x) => x.toLowerCase() === c)) : [];
|
|
1877
|
+
const missing = t ? (a.columns ?? []).filter((c) => !live$1.schema[t].some((x) => x.toLowerCase() === c)) : [];
|
|
1878
1878
|
if (!t) add(a, "table", "major", "data", `The database has no table called ${a.what}`, `${tables.length} table${tables.length === 1 ? "" : "s"} and none is called ${a.what} (${read})`, "The statement names a table the database does not have, so it fails the first time it runs.", `Ship the migration that creates ${a.what} before this, or point the statement at the table that holds this.`);
|
|
1879
|
-
else if (missing.length) add(a, "column", "major", "data", `${t} has no column${missing.length === 1 ? "" : "s"} called ${missing.join(" and ")}`, `${t} has ${live.schema[t].join(", ")} (${read})`, "The statement names a column the table does not have, so it fails the first time it runs.", `Ship the migration that adds ${missing.join(" and ")} to ${t} before this merges, or use the columns the table has.`);
|
|
1880
|
-
} else if (a.kind === "flag" && live?.flags) {
|
|
1881
|
-
if (!(a.what in live.flags)) add(a, "flag", "major", "correctness", `There is no flag called ${a.what} where this code runs`, `${Object.keys(live.flags).length} flag${Object.keys(live.flags).length === 1 ? "" : "s"} and none is called ${a.what} (${read})`, "A flag that does not exist is read as off, so the code behind it never runs - for anyone.", `Create ${a.what}, or use the name of the flag that exists.`);
|
|
1882
|
-
else if (!live.flags[a.what]) add(a, "flag", "minor", "correctness", `${a.what} is off where this code runs`, `${a.what} is off (${read})`, "The code behind this flag runs for nobody until the flag is turned on, so merging this changes nothing yet - and what it replaces must still work.", `Turn ${a.what} on when this is meant to run, and keep the path it replaces working until then.`);
|
|
1879
|
+
else if (missing.length) add(a, "column", "major", "data", `${t} has no column${missing.length === 1 ? "" : "s"} called ${missing.join(" and ")}`, `${t} has ${live$1.schema[t].join(", ")} (${read})`, "The statement names a column the table does not have, so it fails the first time it runs.", `Ship the migration that adds ${missing.join(" and ")} to ${t} before this merges, or use the columns the table has.`);
|
|
1880
|
+
} else if (a.kind === "flag" && live$1?.flags) {
|
|
1881
|
+
if (!(a.what in live$1.flags)) add(a, "flag", "major", "correctness", `There is no flag called ${a.what} where this code runs`, `${Object.keys(live$1.flags).length} flag${Object.keys(live$1.flags).length === 1 ? "" : "s"} and none is called ${a.what} (${read})`, "A flag that does not exist is read as off, so the code behind it never runs - for anyone.", `Create ${a.what}, or use the name of the flag that exists.`);
|
|
1882
|
+
else if (!live$1.flags[a.what]) add(a, "flag", "minor", "correctness", `${a.what} is off where this code runs`, `${a.what} is off (${read})`, "The code behind this flag runs for nobody until the flag is turned on, so merging this changes nothing yet - and what it replaces must still work.", `Turn ${a.what} on when this is meant to run, and keep the path it replaces working until then.`);
|
|
1883
1883
|
} else if (a.kind === "name") {
|
|
1884
|
-
const n$1 = live?.names?.[a.what];
|
|
1884
|
+
const n$1 = live$1?.names?.[a.what];
|
|
1885
1885
|
const zone = zones.find((z) => a.what === z.zone.toLowerCase() || a.what.endsWith(`.${z.zone.toLowerCase()}`));
|
|
1886
1886
|
const named = (r) => {
|
|
1887
1887
|
const x = r.name.toLowerCase().replace(/\.$/, "");
|
|
@@ -1890,10 +1890,10 @@ function assumedFindings(files, live, zones = [], now = /* @__PURE__ */ new Date
|
|
|
1890
1890
|
if (n$1 && !n$1.resolves) add(a, "name", "major", "stability", `${a.what} does not answer`, `${a.what} does not resolve${n$1.why ? ` (${n$1.why})` : ""} (${read})`, "The line calls a name that nothing answers on, so every call it makes fails.", `Create the record for ${a.what}, or call the name that answers.`);
|
|
1891
1891
|
else if (n$1?.certificateUntil && Date.parse(n$1.certificateUntil) - now.getTime() < 7 * 864e5) add(a, "certificate", Date.parse(n$1.certificateUntil) < now.getTime() ? "major" : "minor", "security", Date.parse(n$1.certificateUntil) < now.getTime() ? `The certificate of ${a.what} ran out on ${day(n$1.certificateUntil)}` : `The certificate of ${a.what} runs out on ${day(n$1.certificateUntil)}`, `the certificate ${a.what} presents is good until ${day(n$1.certificateUntil)} (${read})`, "A call to a name whose certificate has run out is refused before it is sent.", `Renew the certificate of ${a.what} before this merges.`);
|
|
1892
1892
|
else if (!n$1 && zone && !zone.records.some(named)) add(a, "name", "major", "stability", `${a.what} has no record in ${zone.zone}`, `the zone ${zone.zone}, as Xovris last read it from its provider, has ${zone.records.length} record${zone.records.length === 1 ? "" : "s"} and none for ${a.what}`, "The line calls a name its own zone has no record for, so every call it makes fails.", `Create the record for ${a.what} in ${zone.zone}, or call the name that has one.`);
|
|
1893
|
-
} else if (a.kind === "permission" && live?.permissions && !granted(a.what, live.permissions)) add(a, "permission", "major", "security", `The service account may not ${a.what}`, `it holds ${live.permissions.length ? live.permissions.join(", ") : "nothing"} - not ${a.what} (${read})`, "The call is refused where the code runs, because the account it runs as was never given this.", `Grant ${a.what} to the service account, on the one thing this call touches, before this merges.`);
|
|
1894
|
-
else if (a.kind === "quota" && live?.quotas) {
|
|
1893
|
+
} else if (a.kind === "permission" && live$1?.permissions && !granted(a.what, live$1.permissions)) add(a, "permission", "major", "security", `The service account may not ${a.what}`, `it holds ${live$1.permissions.length ? live$1.permissions.join(", ") : "nothing"} - not ${a.what} (${read})`, "The call is refused where the code runs, because the account it runs as was never given this.", `Grant ${a.what} to the service account, on the one thing this call touches, before this merges.`);
|
|
1894
|
+
else if (a.kind === "quota" && live$1?.quotas) {
|
|
1895
1895
|
const service = a.what.split(":")[0].toLowerCase();
|
|
1896
|
-
for (const [name, q] of Object.entries(live.quotas)) {
|
|
1896
|
+
for (const [name, q] of Object.entries(live$1.quotas)) {
|
|
1897
1897
|
const share = q.limit > 0 ? q.used / q.limit : 0;
|
|
1898
1898
|
if ((name.toLowerCase() === a.what.toLowerCase() || name.toLowerCase().startsWith(`${service}.`)) && share >= .8) add(a, "quota", share >= .95 ? "major" : "minor", "stability", `${name} is at ${Math.floor(share * 100)}% of its limit`, `${name}: ${q.used.toLocaleString("en-GB")} of ${q.limit.toLocaleString("en-GB")} used (${read})`, "The calls this change adds draw on a limit that is nearly reached; past it they are refused.", `Raise the limit for ${name}, or make these calls fewer, before this merges.`, name);
|
|
1899
1899
|
}
|
|
@@ -25614,20 +25614,20 @@ function liveZoneFindings(files, zones) {
|
|
|
25614
25614
|
return out;
|
|
25615
25615
|
}
|
|
25616
25616
|
/** The zone after the change, held to what mail and the site need; each outage named with the record that causes it. */
|
|
25617
|
-
function liveConfigFindings(files, live) {
|
|
25618
|
-
const changes = zoneChanges(files, live.zone);
|
|
25617
|
+
function liveConfigFindings(files, live$1) {
|
|
25618
|
+
const changes = zoneChanges(files, live$1.zone);
|
|
25619
25619
|
if (!changes.length) return [];
|
|
25620
25620
|
const key = (r) => `${r.name}|${r.type}|${lower(r.value)}`;
|
|
25621
25621
|
const removed = new Set(changes.filter((c) => c.op === "remove").map((c) => key(c.record)));
|
|
25622
|
-
const after = [...live.records.map((r) => ({
|
|
25622
|
+
const after = [...live$1.records.map((r) => ({
|
|
25623
25623
|
...r,
|
|
25624
|
-
name: fqdn(r.name, live.zone),
|
|
25624
|
+
name: fqdn(r.name, live$1.zone),
|
|
25625
25625
|
value: unq(r.value)
|
|
25626
25626
|
})).filter((r) => !removed.has(key(r))), ...changes.filter((c) => c.op === "add").map((c) => c.record)];
|
|
25627
25627
|
const at$3 = (name, type) => after.filter((r) => r.name === name && (!type || r.type === type));
|
|
25628
|
-
const apex = lower(live.zone);
|
|
25628
|
+
const apex = lower(live$1.zone);
|
|
25629
25629
|
const out = [];
|
|
25630
|
-
const liveMx = live.records.filter((r) => r.type === "MX" && fqdn(r.name, live.zone) === apex);
|
|
25630
|
+
const liveMx = live$1.records.filter((r) => r.type === "MX" && fqdn(r.name, live$1.zone) === apex);
|
|
25631
25631
|
const where = (pred) => changes.find(pred) ?? changes[0];
|
|
25632
25632
|
const asRepaired = (code$1, lead) => {
|
|
25633
25633
|
const r = deriveMailRepair(code$1, mailStateOfZone(after.map((x) => ({
|
|
@@ -25644,23 +25644,23 @@ function liveConfigFindings(files, live) {
|
|
|
25644
25644
|
if (host.endsWith(apex) && !at$3(host, "A").length && !at$3(host, "AAAA").length && !at$3(host, "CNAME").length) out.push(finding(where((c) => c.record.type === "MX" || c.record.name === host), "mx-dangling", "Mail is pointed at a name that does not resolve", `The MX record sends mail to ${host}, which has no address in the zone after this change, so mail cannot be delivered.`, `Add an A or AAAA record for ${host}, or point the MX at the mail provider's host.`));
|
|
25645
25645
|
}
|
|
25646
25646
|
const spf = at$3(apex, "TXT").filter((r) => /^v=spf1\b/i.test(r.value));
|
|
25647
|
-
const hadSpf = live.records.some((r) => fqdn(r.name, live.zone) === apex && r.type === "TXT" && /^v=spf1\b/i.test(unq(r.value)));
|
|
25647
|
+
const hadSpf = live$1.records.some((r) => fqdn(r.name, live$1.zone) === apex && r.type === "TXT" && /^v=spf1\b/i.test(unq(r.value)));
|
|
25648
25648
|
if (spf.length > 1) out.push(finding(where((c) => /^v=spf1/i.test(c.record.value)), "spf-twice", "Two SPF records make every SPF check fail", `${apex} would publish ${spf.length} SPF records; RFC 7208 section 3.2 makes that a permanent error, so receivers treat the domain's mail as unauthenticated.`, asRepaired("spf.multiple", "Merge them into one v=spf1 record")));
|
|
25649
25649
|
else if (hadSpf && !spf.length) out.push(finding(where((c) => c.record.type === "TXT"), "spf-gone", "This change removes the domain's SPF record", `${apex} authenticates its mail with SPF today; without it, mail from the domain is more likely to be rejected or marked as spam.`, "Keep the v=spf1 record.", "major"));
|
|
25650
25650
|
else if (spf[0] && /\s[+]?all\b/.test(` ${spf[0].value}`)) out.push(finding(where((c) => /^v=spf1/i.test(c.record.value)), "spf-open", "This SPF record lets anyone send as the domain", `"${spf[0].value}" ends in +all, which authorises every server on the internet.`, asRepaired("spf.open_all", "End it in ~all"), "major"));
|
|
25651
25651
|
const dmarcName = `_dmarc.${apex}`;
|
|
25652
|
-
if (live.records.some((r) => fqdn(r.name, live.zone) === dmarcName) && !at$3(dmarcName, "TXT").length) out.push(finding(where((c) => c.record.name === dmarcName), "dmarc-gone", "This change removes DMARC", `${dmarcName} protects the domain from spoofing today; without it receivers have no policy and the reports stop.`, "Keep the _dmarc TXT record.", "major"));
|
|
25653
|
-
for (const sel of live.dkimSelectors ?? []) {
|
|
25652
|
+
if (live$1.records.some((r) => fqdn(r.name, live$1.zone) === dmarcName) && !at$3(dmarcName, "TXT").length) out.push(finding(where((c) => c.record.name === dmarcName), "dmarc-gone", "This change removes DMARC", `${dmarcName} protects the domain from spoofing today; without it receivers have no policy and the reports stop.`, "Keep the _dmarc TXT record.", "major"));
|
|
25653
|
+
for (const sel of live$1.dkimSelectors ?? []) {
|
|
25654
25654
|
const n$1 = `${lower(sel)}._domainkey.${apex}`;
|
|
25655
|
-
if (live.records.some((r) => fqdn(r.name, live.zone) === n$1) && !at$3(n$1).length) out.push(finding(where((c) => c.record.name === n$1), "dkim-gone", "This change removes a DKIM key that is signing mail now", `Mail was signed with the selector ${sel} in the last 30 days; removing ${n$1} makes those signatures fail.`, `Keep ${n$1} until no mail is signed with ${sel}.`));
|
|
25655
|
+
if (live$1.records.some((r) => fqdn(r.name, live$1.zone) === n$1) && !at$3(n$1).length) out.push(finding(where((c) => c.record.name === n$1), "dkim-gone", "This change removes a DKIM key that is signing mail now", `Mail was signed with the selector ${sel} in the last 30 days; removing ${n$1} makes those signatures fail.`, `Keep ${n$1} until no mail is signed with ${sel}.`));
|
|
25656
25656
|
}
|
|
25657
25657
|
for (const name of new Set(after.map((r) => r.name))) {
|
|
25658
25658
|
const recs = at$3(name);
|
|
25659
25659
|
if (recs.some((r) => r.type === "CNAME") && recs.length > 1) out.push(finding(where((c) => c.record.name === name), "cname-beside", name === apex ? "A CNAME at the apex breaks the domain" : "A CNAME cannot sit beside other records", `${name} would have a CNAME and ${recs.length - 1} other record${recs.length > 2 ? "s" : ""}; RFC 1034 section 3.6.2 forbids it, and resolvers answer unpredictably.`, name === apex ? "Use the provider's flattened apex record (ALIAS or CNAME flattening) instead." : "Remove the other records or the CNAME."));
|
|
25660
25660
|
}
|
|
25661
|
-
for (const name of live.inUse ?? []) {
|
|
25662
|
-
const n$1 = fqdn(name, live.zone);
|
|
25663
|
-
if (live.records.some((r) => fqdn(r.name, live.zone) === n$1 && [
|
|
25661
|
+
for (const name of live$1.inUse ?? []) {
|
|
25662
|
+
const n$1 = fqdn(name, live$1.zone);
|
|
25663
|
+
if (live$1.records.some((r) => fqdn(r.name, live$1.zone) === n$1 && [
|
|
25664
25664
|
"A",
|
|
25665
25665
|
"AAAA",
|
|
25666
25666
|
"CNAME"
|
|
@@ -25879,7 +25879,7 @@ const A = (id$1, languages, files, kind, sarif) => ({
|
|
|
25879
25879
|
kind,
|
|
25880
25880
|
sarif
|
|
25881
25881
|
});
|
|
25882
|
-
const JS$
|
|
25882
|
+
const JS$4 = /\.(m|c)?(j|t)sx?$/;
|
|
25883
25883
|
const PY = /\.py$/;
|
|
25884
25884
|
const GO = /\.go$/;
|
|
25885
25885
|
const RB = /\.rb$/;
|
|
@@ -25888,12 +25888,12 @@ const SH = /\.(sh|bash)$/;
|
|
|
25888
25888
|
const TF = /\.tf$/;
|
|
25889
25889
|
const YML = /\.ya?ml$/;
|
|
25890
25890
|
const ANALYZERS = [
|
|
25891
|
-
A("eslint", ["javascript", "typescript"], JS$
|
|
25892
|
-
A("biome", ["javascript", "typescript"], JS$
|
|
25893
|
-
A("oxlint", ["javascript", "typescript"], JS$
|
|
25891
|
+
A("eslint", ["javascript", "typescript"], JS$4, "lint", "eslint -f @microsoft/eslint-formatter-sarif"),
|
|
25892
|
+
A("biome", ["javascript", "typescript"], JS$4, "lint", "biome lint --reporter=sarif"),
|
|
25893
|
+
A("oxlint", ["javascript", "typescript"], JS$4, "lint", "oxlint --format sarif"),
|
|
25894
25894
|
A("semgrep", ["*"], /./, "sast", "semgrep --sarif"),
|
|
25895
25895
|
A("codeql", ["*"], /./, "sast", "codeql database analyze --format=sarif-latest"),
|
|
25896
|
-
A("njsscan", ["javascript"], JS$
|
|
25896
|
+
A("njsscan", ["javascript"], JS$4, "sast", "njsscan --sarif"),
|
|
25897
25897
|
A("ruff", ["python"], PY, "lint", "ruff check --output-format sarif"),
|
|
25898
25898
|
A("pylint", ["python"], PY, "lint", "pylint --output-format=sarif"),
|
|
25899
25899
|
A("bandit", ["python"], PY, "sast", "bandit -f sarif"),
|
|
@@ -26263,9 +26263,9 @@ function exportsOf(text) {
|
|
|
26263
26263
|
/** Every place a repository imports `symbol` from `pkg` and calls it, with the number of arguments it passes. */
|
|
26264
26264
|
function callersOf(repo, files, pkg, symbol) {
|
|
26265
26265
|
const out = [];
|
|
26266
|
-
const esc$
|
|
26266
|
+
const esc$2 = pkg.replace(/[.*+?^${}()|[\]\\/]/g, "\\$&");
|
|
26267
26267
|
for (const f of files) {
|
|
26268
|
-
const imp = new RegExp(`import\\s*(?:type\\s*)?\\{([^}]*)\\}\\s*from\\s*['"]${esc$
|
|
26268
|
+
const imp = new RegExp(`import\\s*(?:type\\s*)?\\{([^}]*)\\}\\s*from\\s*['"]${esc$2}(?:/[^'"]*)?['"]|const\\s*\\{([^}]*)\\}\\s*=\\s*require\\(\\s*['"]${esc$2}['"]\\s*\\)`, "g");
|
|
26269
26269
|
let local = null;
|
|
26270
26270
|
for (const m of f.text.matchAll(imp)) for (const part of (m[1] ?? m[2] ?? "").split(",")) {
|
|
26271
26271
|
const [name, as] = part.trim().replace(/^type\s+/, "").split(/\s+as\s+|\s*:\s*/);
|
|
@@ -26338,9 +26338,9 @@ function beforeText(f, now) {
|
|
|
26338
26338
|
}
|
|
26339
26339
|
/** The package a file belongs to: the name in the nearest package.json at or above it, among the files the door could read. */
|
|
26340
26340
|
function packageOf(path, contents) {
|
|
26341
|
-
const parts$
|
|
26342
|
-
for (let i = parts$
|
|
26343
|
-
const root = parts$
|
|
26341
|
+
const parts$2 = path.replace(/\\/g, "/").split("/");
|
|
26342
|
+
for (let i = parts$2.length - 1; i >= 0; i -= 1) {
|
|
26343
|
+
const root = parts$2.slice(0, i).join("/");
|
|
26344
26344
|
const text = contents[root ? `${root}/package.json` : "package.json"];
|
|
26345
26345
|
if (text === void 0) continue;
|
|
26346
26346
|
try {
|
|
@@ -33899,6 +33899,1702 @@ function applyConfig(findings, files, cfg) {
|
|
|
33899
33899
|
return out;
|
|
33900
33900
|
}
|
|
33901
33901
|
|
|
33902
|
+
//#endregion
|
|
33903
|
+
//#region ../review/src/deprecations-feed.ts
|
|
33904
|
+
const NODE_DEPRECATIONS_URL = "https://nodejs.org/api/deprecations.json";
|
|
33905
|
+
const NODE_RELEASES_URL = "https://nodejs.org/dist/index.json";
|
|
33906
|
+
const JS$3 = /\.(m|c)?(j|t)sx?$/;
|
|
33907
|
+
const esc$1 = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
33908
|
+
const parts$1 = (v) => v.replace(/^v/, "").split(".").map((x) => Number.parseInt(x, 10) || 0);
|
|
33909
|
+
const newer = (a, b) => {
|
|
33910
|
+
const x = parts$1(a), y = parts$1(b);
|
|
33911
|
+
for (let i = 0; i < 3; i += 1) if ((x[i] ?? 0) !== (y[i] ?? 0)) return (x[i] ?? 0) > (y[i] ?? 0);
|
|
33912
|
+
return false;
|
|
33913
|
+
};
|
|
33914
|
+
/** The version a change landed in on the newest release line it names (a backport's older lines are the same change). */
|
|
33915
|
+
const versionOf = (v) => {
|
|
33916
|
+
const all$1 = (Array.isArray(v) ? v : v ? [v] : []).map((x) => x.replace(/^v/, "")).filter((x) => /^\d+\.\d+\.\d+$/.test(x));
|
|
33917
|
+
return all$1.length ? all$1.reduce((a, b) => newer(b, a) ? b : a) : null;
|
|
33918
|
+
};
|
|
33919
|
+
const unhtml = (s) => s.replace(/<[^>]+>/g, "").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, "\"").replace(/'/g, "'").replace(/&/g, "&").trim();
|
|
33920
|
+
/** `util.isArray()` -> \butil\.isArray\s*\(, `new Buffer()` -> \bnew\s+Buffer\s*\( - only a callable API in the heading; anything else is
|
|
33921
|
+
* a module, an option or an event, which no single line pattern names truthfully, so it is left to the hand-written floor. */
|
|
33922
|
+
function patternFor(api) {
|
|
33923
|
+
const m = /^(new\s+)?([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\(\)$/.exec(api.trim());
|
|
33924
|
+
if (!m) return null;
|
|
33925
|
+
const path = m[2].split(".").map(esc$1).join("\\.");
|
|
33926
|
+
return /* @__PURE__ */ new RegExp(`${m[1] ? "\\bnew\\s+" : "\\b"}${path}\\s*\\(`);
|
|
33927
|
+
}
|
|
33928
|
+
const BUILTINS = new Set(builtinModules.map((m) => m.replace(/^node:/, "")));
|
|
33929
|
+
const dotted = (p$1) => p$1.split(".").map(esc$1).join("\\.");
|
|
33930
|
+
const IDENT$1 = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*$/;
|
|
33931
|
+
const distinct = (m) => /_/.test(m) || /[a-z][A-Z]/.test(m) || /[A-Z].*[A-Z]/.test(m);
|
|
33932
|
+
const member = (name) => {
|
|
33933
|
+
const [mod, ...rest] = name.split(".");
|
|
33934
|
+
const tail$2 = rest.join(".");
|
|
33935
|
+
return BUILTINS.has(mod) && rest.length === 1 && distinct(tail$2) ? `(?:\\b${esc$1(mod)}\\.|(?<![\\w$.]))${dotted(tail$2)}\\b` : `\\b${dotted(name)}\\b`;
|
|
33936
|
+
};
|
|
33937
|
+
const PLAIN = new Set([
|
|
33938
|
+
"and",
|
|
33939
|
+
"or",
|
|
33940
|
+
"the",
|
|
33941
|
+
"a",
|
|
33942
|
+
"an",
|
|
33943
|
+
"module",
|
|
33944
|
+
"modules",
|
|
33945
|
+
"class",
|
|
33946
|
+
"classes",
|
|
33947
|
+
"function",
|
|
33948
|
+
"functions",
|
|
33949
|
+
"method",
|
|
33950
|
+
"methods",
|
|
33951
|
+
"property",
|
|
33952
|
+
"properties",
|
|
33953
|
+
"option",
|
|
33954
|
+
"options",
|
|
33955
|
+
"of",
|
|
33956
|
+
"http/2",
|
|
33957
|
+
"servers",
|
|
33958
|
+
"server",
|
|
33959
|
+
"api",
|
|
33960
|
+
"apis"
|
|
33961
|
+
]);
|
|
33962
|
+
function headingPattern(heading) {
|
|
33963
|
+
const h = unhtml(heading).trim();
|
|
33964
|
+
const ticks = [...h.matchAll(/`([^`]+)`/g)].map((m) => m[1].trim());
|
|
33965
|
+
if (!ticks.length) return null;
|
|
33966
|
+
const pass = /^Passing `options\.([A-Za-z_$][\w$]*)` to `([A-Za-z_$][\w$.]*)\(\)`/.exec(h);
|
|
33967
|
+
if (pass) return /* @__PURE__ */ new RegExp(`\\b${dotted(pass[2])}\\s*\\([^;]*\\b${esc$1(pass[1])}\\s*:`);
|
|
33968
|
+
const empty = /`options\.([A-Za-z_$][\w$]*)` as an empty string/.exec(h);
|
|
33969
|
+
if (empty) return /* @__PURE__ */ new RegExp(`\\b${esc$1(empty[1])}\\s*:\\s*(['"\`])\\1`);
|
|
33970
|
+
const bare$1 = /^Instantiating `node:([a-z_]+)` classes without `new`/.exec(h);
|
|
33971
|
+
if (bare$1) return /* @__PURE__ */ new RegExp(`(?<!new\\s+)\\b${esc$1(bare$1[1])}\\.[A-Z][A-Za-z0-9]*\\s*\\(`);
|
|
33972
|
+
if (/^(Passing|Calling|Creating|Using|Closing)\b|\bwithout\b/.test(h)) return null;
|
|
33973
|
+
if (/^(new\s+)?([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\(\)$/.exec(ticks[0]) && h.startsWith("`")) return patternFor(ticks[0]);
|
|
33974
|
+
const words = h.replace(/`[^`]+`/g, " ").toLowerCase().split(/[\s,]+/).filter(Boolean);
|
|
33975
|
+
if (words.some((w) => !PLAIN.has(w) && !(w === "constructor" && words.length === 1))) return null;
|
|
33976
|
+
const alts = [];
|
|
33977
|
+
for (const t of ticks) {
|
|
33978
|
+
const req = /^require\('(?:node:)?([\w*]+)'\)$/.exec(t);
|
|
33979
|
+
const call = /^(new\s+)?([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\(\)$/.exec(t);
|
|
33980
|
+
const proto = /^[A-Za-z_$][\w$]*\.prototype\.(_[\w$]+)$/.exec(t);
|
|
33981
|
+
const star = /^([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)_\*$/.exec(t);
|
|
33982
|
+
if (req) alts.push(`(?:require\\s*\\(|import\\s*\\(|from)\\s*['"](?:node:)?${esc$1(req[1]).replace(/\\\*/g, "\\w+")}['"]`);
|
|
33983
|
+
else if (call) alts.push(`${call[1] ? "\\bnew\\s+" : "\\b"}${dotted(call[2])}\\s*\\(`);
|
|
33984
|
+
else if (proto) alts.push(`\\.${esc$1(proto[1])}\\b`);
|
|
33985
|
+
else if (star) alts.push(`\\b${dotted(star[1])}_\\w+`);
|
|
33986
|
+
else if (IDENT$1.test(t) && / constructor$/.test(h)) alts.push(`\\b(?:new\\s+)?${dotted(t)}\\s*\\(`);
|
|
33987
|
+
else if (IDENT$1.test(t) && (t.includes(".") || /^[A-Z][A-Za-z0-9]+$/.test(t) && !BUILTINS.has(t.toLowerCase()))) alts.push(member(t));
|
|
33988
|
+
}
|
|
33989
|
+
return alts.length ? new RegExp(alts.join("|")) : null;
|
|
33990
|
+
}
|
|
33991
|
+
/** Node's own deprecation list and release dates read into catalogue entries (read: the day both were read). */
|
|
33992
|
+
function fromNodeDocs(docs, releases, read) {
|
|
33993
|
+
const dates = new Map((Array.isArray(releases) ? releases : []).flatMap((r) => typeof r?.version === "string" && typeof r?.date === "string" ? [[r.version.replace(/^v/, ""), r.date]] : []));
|
|
33994
|
+
const list$1 = (docs?.miscs?.[0]?.miscs ?? []).find((x) => /list of deprecated apis/i.test(x.textRaw ?? ""))?.modules ?? [];
|
|
33995
|
+
const out = [];
|
|
33996
|
+
for (const s of list$1) {
|
|
33997
|
+
const head = /^(DEP\d{4}):\s*(.+)$/.exec(s.textRaw ?? "");
|
|
33998
|
+
if (!head) continue;
|
|
33999
|
+
const pattern = headingPattern(head[2]);
|
|
34000
|
+
if (!pattern) continue;
|
|
34001
|
+
const changes = s.meta?.changes ?? [];
|
|
34002
|
+
const at$3 = (re) => versionOf(changes.find((c) => re.test(c.description ?? ""))?.version);
|
|
34003
|
+
const deprecatedIn = at$3(/runtime deprecation/i) ?? at$3(/documentation-only/i);
|
|
34004
|
+
if (!deprecatedIn) continue;
|
|
34005
|
+
const removedIn = at$3(/end-of-life/i);
|
|
34006
|
+
const use = /use\s+(?:<a[^>]*>)?<code>([^<]+)<\/code>/i.exec(s.desc ?? "")?.[1];
|
|
34007
|
+
out.push({
|
|
34008
|
+
id: head[1],
|
|
34009
|
+
ecosystem: "node",
|
|
34010
|
+
pkg: "node",
|
|
34011
|
+
pattern: pattern.source,
|
|
34012
|
+
deprecatedIn,
|
|
34013
|
+
deprecatedOn: dates.get(deprecatedIn) ?? read,
|
|
34014
|
+
removedIn,
|
|
34015
|
+
removedOn: removedIn ? dates.get(removedIn) ?? null : null,
|
|
34016
|
+
replacement: use ? unhtml(use) : `what Node's page for ${head[1]} names`,
|
|
34017
|
+
source: `https://nodejs.org/api/deprecations.html#${head[1].toLowerCase()}`,
|
|
34018
|
+
read
|
|
34019
|
+
});
|
|
34020
|
+
}
|
|
34021
|
+
return out;
|
|
34022
|
+
}
|
|
34023
|
+
/** The catalogue a review matches: the hand-written floor, then every generated entry whose id the floor does not hold. */
|
|
34024
|
+
function withGenerated(floor, kept) {
|
|
34025
|
+
const have = new Set(floor.map((d) => d.id));
|
|
34026
|
+
return [...floor, ...kept.filter((k) => !have.has(k.id)).map((k) => ({
|
|
34027
|
+
...k,
|
|
34028
|
+
pattern: new RegExp(k.pattern),
|
|
34029
|
+
files: JS$3
|
|
34030
|
+
}))];
|
|
34031
|
+
}
|
|
34032
|
+
|
|
34033
|
+
//#endregion
|
|
34034
|
+
//#region ../review/data/node-deprecations.json
|
|
34035
|
+
var entries = [
|
|
34036
|
+
{
|
|
34037
|
+
"id": "DEP0001",
|
|
34038
|
+
"ecosystem": "node",
|
|
34039
|
+
"pkg": "node",
|
|
34040
|
+
"pattern": "\\bhttp\\.OutgoingMessage\\.prototype\\.flush\\b",
|
|
34041
|
+
"deprecatedIn": "1.6.0",
|
|
34042
|
+
"deprecatedOn": "2026-10-19",
|
|
34043
|
+
"removedIn": "14.0.0",
|
|
34044
|
+
"removedOn": "2020-04-21",
|
|
34045
|
+
"replacement": "OutgoingMessage.prototype.flushHeaders()",
|
|
34046
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0001",
|
|
34047
|
+
"read": "2026-10-19"
|
|
34048
|
+
},
|
|
34049
|
+
{
|
|
34050
|
+
"id": "DEP0002",
|
|
34051
|
+
"ecosystem": "node",
|
|
34052
|
+
"pkg": "node",
|
|
34053
|
+
"pattern": "(?:require\\s*\\(|import\\s*\\(|from)\\s*['\"](?:node:)?_linklist['\"]",
|
|
34054
|
+
"deprecatedIn": "5.0.0",
|
|
34055
|
+
"deprecatedOn": "2015-10-29",
|
|
34056
|
+
"removedIn": "8.0.0",
|
|
34057
|
+
"removedOn": "2017-05-30",
|
|
34058
|
+
"replacement": "what Node's page for DEP0002 names",
|
|
34059
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0002",
|
|
34060
|
+
"read": "2026-10-19"
|
|
34061
|
+
},
|
|
34062
|
+
{
|
|
34063
|
+
"id": "DEP0003",
|
|
34064
|
+
"ecosystem": "node",
|
|
34065
|
+
"pkg": "node",
|
|
34066
|
+
"pattern": "\\b_writableState\\.buffer\\b",
|
|
34067
|
+
"deprecatedIn": "0.11.15",
|
|
34068
|
+
"deprecatedOn": "2015-01-20",
|
|
34069
|
+
"removedIn": "14.0.0",
|
|
34070
|
+
"removedOn": "2020-04-21",
|
|
34071
|
+
"replacement": "_writableState.getBuffer()",
|
|
34072
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0003",
|
|
34073
|
+
"read": "2026-10-19"
|
|
34074
|
+
},
|
|
34075
|
+
{
|
|
34076
|
+
"id": "DEP0004",
|
|
34077
|
+
"ecosystem": "node",
|
|
34078
|
+
"pkg": "node",
|
|
34079
|
+
"pattern": "\\bCryptoStream\\.prototype\\.readyState\\b",
|
|
34080
|
+
"deprecatedIn": "0.4.0",
|
|
34081
|
+
"deprecatedOn": "2011-08-26",
|
|
34082
|
+
"removedIn": "10.0.0",
|
|
34083
|
+
"removedOn": "2018-04-24",
|
|
34084
|
+
"replacement": "what Node's page for DEP0004 names",
|
|
34085
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0004",
|
|
34086
|
+
"read": "2026-10-19"
|
|
34087
|
+
},
|
|
34088
|
+
{
|
|
34089
|
+
"id": "DEP0005",
|
|
34090
|
+
"ecosystem": "node",
|
|
34091
|
+
"pkg": "node",
|
|
34092
|
+
"pattern": "\\bBuffer\\s*\\(",
|
|
34093
|
+
"deprecatedIn": "10.0.0",
|
|
34094
|
+
"deprecatedOn": "2018-04-24",
|
|
34095
|
+
"removedIn": null,
|
|
34096
|
+
"removedOn": null,
|
|
34097
|
+
"replacement": "what Node's page for DEP0005 names",
|
|
34098
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0005",
|
|
34099
|
+
"read": "2026-10-19"
|
|
34100
|
+
},
|
|
34101
|
+
{
|
|
34102
|
+
"id": "DEP0006",
|
|
34103
|
+
"ecosystem": "node",
|
|
34104
|
+
"pkg": "node",
|
|
34105
|
+
"pattern": "\\boptions\\.customFds\\b",
|
|
34106
|
+
"deprecatedIn": "0.11.14",
|
|
34107
|
+
"deprecatedOn": "2014-08-19",
|
|
34108
|
+
"removedIn": "12.0.0",
|
|
34109
|
+
"removedOn": "2019-04-23",
|
|
34110
|
+
"replacement": "what Node's page for DEP0006 names",
|
|
34111
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0006",
|
|
34112
|
+
"read": "2026-10-19"
|
|
34113
|
+
},
|
|
34114
|
+
{
|
|
34115
|
+
"id": "DEP0008",
|
|
34116
|
+
"ecosystem": "node",
|
|
34117
|
+
"pkg": "node",
|
|
34118
|
+
"pattern": "(?:require\\s*\\(|import\\s*\\(|from)\\s*['\"](?:node:)?constants['\"]",
|
|
34119
|
+
"deprecatedIn": "6.3.0",
|
|
34120
|
+
"deprecatedOn": "2016-07-06",
|
|
34121
|
+
"removedIn": null,
|
|
34122
|
+
"removedOn": null,
|
|
34123
|
+
"replacement": "what Node's page for DEP0008 names",
|
|
34124
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0008",
|
|
34125
|
+
"read": "2026-10-19"
|
|
34126
|
+
},
|
|
34127
|
+
{
|
|
34128
|
+
"id": "DEP0010",
|
|
34129
|
+
"ecosystem": "node",
|
|
34130
|
+
"pkg": "node",
|
|
34131
|
+
"pattern": "(?:\\bcrypto\\.|(?<![\\w$.]))createCredentials\\b",
|
|
34132
|
+
"deprecatedIn": "0.11.13",
|
|
34133
|
+
"deprecatedOn": "2014-05-02",
|
|
34134
|
+
"removedIn": "11.0.0",
|
|
34135
|
+
"removedOn": "2018-10-23",
|
|
34136
|
+
"replacement": "tls.createSecureContext()",
|
|
34137
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0010",
|
|
34138
|
+
"read": "2026-10-19"
|
|
34139
|
+
},
|
|
34140
|
+
{
|
|
34141
|
+
"id": "DEP0011",
|
|
34142
|
+
"ecosystem": "node",
|
|
34143
|
+
"pkg": "node",
|
|
34144
|
+
"pattern": "\\bcrypto\\.Credentials\\b",
|
|
34145
|
+
"deprecatedIn": "0.11.13",
|
|
34146
|
+
"deprecatedOn": "2014-05-02",
|
|
34147
|
+
"removedIn": "11.0.0",
|
|
34148
|
+
"removedOn": "2018-10-23",
|
|
34149
|
+
"replacement": "tls.SecureContext",
|
|
34150
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0011",
|
|
34151
|
+
"read": "2026-10-19"
|
|
34152
|
+
},
|
|
34153
|
+
{
|
|
34154
|
+
"id": "DEP0012",
|
|
34155
|
+
"ecosystem": "node",
|
|
34156
|
+
"pkg": "node",
|
|
34157
|
+
"pattern": "\\bDomain\\.dispose\\b",
|
|
34158
|
+
"deprecatedIn": "0.11.7",
|
|
34159
|
+
"deprecatedOn": "2013-09-04",
|
|
34160
|
+
"removedIn": "9.0.0",
|
|
34161
|
+
"removedOn": "2017-10-31",
|
|
34162
|
+
"replacement": "what Node's page for DEP0012 names",
|
|
34163
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0012",
|
|
34164
|
+
"read": "2026-10-19"
|
|
34165
|
+
},
|
|
34166
|
+
{
|
|
34167
|
+
"id": "DEP0017",
|
|
34168
|
+
"ecosystem": "node",
|
|
34169
|
+
"pkg": "node",
|
|
34170
|
+
"pattern": "\\bIntl\\.v8BreakIterator\\b",
|
|
34171
|
+
"deprecatedIn": "7.0.0",
|
|
34172
|
+
"deprecatedOn": "2016-10-25",
|
|
34173
|
+
"removedIn": "9.0.0",
|
|
34174
|
+
"removedOn": "2017-10-31",
|
|
34175
|
+
"replacement": "what Node's page for DEP0017 names",
|
|
34176
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0017",
|
|
34177
|
+
"read": "2026-10-19"
|
|
34178
|
+
},
|
|
34179
|
+
{
|
|
34180
|
+
"id": "DEP0020",
|
|
34181
|
+
"ecosystem": "node",
|
|
34182
|
+
"pkg": "node",
|
|
34183
|
+
"pattern": "\\bServer\\.connections\\b",
|
|
34184
|
+
"deprecatedIn": "0.9.7",
|
|
34185
|
+
"deprecatedOn": "2013-01-18",
|
|
34186
|
+
"removedIn": null,
|
|
34187
|
+
"removedOn": null,
|
|
34188
|
+
"replacement": "what Node's page for DEP0020 names",
|
|
34189
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0020",
|
|
34190
|
+
"read": "2026-10-19"
|
|
34191
|
+
},
|
|
34192
|
+
{
|
|
34193
|
+
"id": "DEP0021",
|
|
34194
|
+
"ecosystem": "node",
|
|
34195
|
+
"pkg": "node",
|
|
34196
|
+
"pattern": "\\bServer\\.listenFD\\b",
|
|
34197
|
+
"deprecatedIn": "0.7.12",
|
|
34198
|
+
"deprecatedOn": "2012-06-19",
|
|
34199
|
+
"removedIn": "12.0.0",
|
|
34200
|
+
"removedOn": "2019-04-23",
|
|
34201
|
+
"replacement": "Server.listen({fd: <number>})",
|
|
34202
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0021",
|
|
34203
|
+
"read": "2026-10-19"
|
|
34204
|
+
},
|
|
34205
|
+
{
|
|
34206
|
+
"id": "DEP0022",
|
|
34207
|
+
"ecosystem": "node",
|
|
34208
|
+
"pkg": "node",
|
|
34209
|
+
"pattern": "\\bos\\.tmpDir\\s*\\(",
|
|
34210
|
+
"deprecatedIn": "7.0.0",
|
|
34211
|
+
"deprecatedOn": "2016-10-25",
|
|
34212
|
+
"removedIn": "14.0.0",
|
|
34213
|
+
"removedOn": "2020-04-21",
|
|
34214
|
+
"replacement": "os.tmpdir()",
|
|
34215
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0022",
|
|
34216
|
+
"read": "2026-10-19"
|
|
34217
|
+
},
|
|
34218
|
+
{
|
|
34219
|
+
"id": "DEP0023",
|
|
34220
|
+
"ecosystem": "node",
|
|
34221
|
+
"pkg": "node",
|
|
34222
|
+
"pattern": "\\bos\\.getNetworkInterfaces\\s*\\(",
|
|
34223
|
+
"deprecatedIn": "0.6.0",
|
|
34224
|
+
"deprecatedOn": "2011-11-04",
|
|
34225
|
+
"removedIn": "12.0.0",
|
|
34226
|
+
"removedOn": "2019-04-23",
|
|
34227
|
+
"replacement": "what Node's page for DEP0023 names",
|
|
34228
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0023",
|
|
34229
|
+
"read": "2026-10-19"
|
|
34230
|
+
},
|
|
34231
|
+
{
|
|
34232
|
+
"id": "DEP0024",
|
|
34233
|
+
"ecosystem": "node",
|
|
34234
|
+
"pkg": "node",
|
|
34235
|
+
"pattern": "\\bREPLServer\\.prototype\\.convertToContext\\s*\\(",
|
|
34236
|
+
"deprecatedIn": "7.0.0",
|
|
34237
|
+
"deprecatedOn": "2016-10-25",
|
|
34238
|
+
"removedIn": "9.0.0",
|
|
34239
|
+
"removedOn": "2017-10-31",
|
|
34240
|
+
"replacement": "what Node's page for DEP0024 names",
|
|
34241
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0024",
|
|
34242
|
+
"read": "2026-10-19"
|
|
34243
|
+
},
|
|
34244
|
+
{
|
|
34245
|
+
"id": "DEP0025",
|
|
34246
|
+
"ecosystem": "node",
|
|
34247
|
+
"pkg": "node",
|
|
34248
|
+
"pattern": "(?:require\\s*\\(|import\\s*\\(|from)\\s*['\"](?:node:)?sys['\"]",
|
|
34249
|
+
"deprecatedIn": "1.0.0",
|
|
34250
|
+
"deprecatedOn": "2026-10-19",
|
|
34251
|
+
"removedIn": null,
|
|
34252
|
+
"removedOn": null,
|
|
34253
|
+
"replacement": "what Node's page for DEP0025 names",
|
|
34254
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0025",
|
|
34255
|
+
"read": "2026-10-19"
|
|
34256
|
+
},
|
|
34257
|
+
{
|
|
34258
|
+
"id": "DEP0026",
|
|
34259
|
+
"ecosystem": "node",
|
|
34260
|
+
"pkg": "node",
|
|
34261
|
+
"pattern": "\\butil\\.print\\s*\\(",
|
|
34262
|
+
"deprecatedIn": "0.11.3",
|
|
34263
|
+
"deprecatedOn": "2013-06-26",
|
|
34264
|
+
"removedIn": "12.0.0",
|
|
34265
|
+
"removedOn": "2019-04-23",
|
|
34266
|
+
"replacement": "console.log()",
|
|
34267
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0026",
|
|
34268
|
+
"read": "2026-10-19"
|
|
34269
|
+
},
|
|
34270
|
+
{
|
|
34271
|
+
"id": "DEP0027",
|
|
34272
|
+
"ecosystem": "node",
|
|
34273
|
+
"pkg": "node",
|
|
34274
|
+
"pattern": "\\butil\\.puts\\s*\\(",
|
|
34275
|
+
"deprecatedIn": "0.11.3",
|
|
34276
|
+
"deprecatedOn": "2013-06-26",
|
|
34277
|
+
"removedIn": "12.0.0",
|
|
34278
|
+
"removedOn": "2019-04-23",
|
|
34279
|
+
"replacement": "console.log()",
|
|
34280
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0027",
|
|
34281
|
+
"read": "2026-10-19"
|
|
34282
|
+
},
|
|
34283
|
+
{
|
|
34284
|
+
"id": "DEP0028",
|
|
34285
|
+
"ecosystem": "node",
|
|
34286
|
+
"pkg": "node",
|
|
34287
|
+
"pattern": "\\butil\\.debug\\s*\\(",
|
|
34288
|
+
"deprecatedIn": "0.11.3",
|
|
34289
|
+
"deprecatedOn": "2013-06-26",
|
|
34290
|
+
"removedIn": "12.0.0",
|
|
34291
|
+
"removedOn": "2019-04-23",
|
|
34292
|
+
"replacement": "console.error()",
|
|
34293
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0028",
|
|
34294
|
+
"read": "2026-10-19"
|
|
34295
|
+
},
|
|
34296
|
+
{
|
|
34297
|
+
"id": "DEP0029",
|
|
34298
|
+
"ecosystem": "node",
|
|
34299
|
+
"pkg": "node",
|
|
34300
|
+
"pattern": "\\butil\\.error\\s*\\(",
|
|
34301
|
+
"deprecatedIn": "0.11.3",
|
|
34302
|
+
"deprecatedOn": "2013-06-26",
|
|
34303
|
+
"removedIn": "12.0.0",
|
|
34304
|
+
"removedOn": "2019-04-23",
|
|
34305
|
+
"replacement": "console.error()",
|
|
34306
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0029",
|
|
34307
|
+
"read": "2026-10-19"
|
|
34308
|
+
},
|
|
34309
|
+
{
|
|
34310
|
+
"id": "DEP0030",
|
|
34311
|
+
"ecosystem": "node",
|
|
34312
|
+
"pkg": "node",
|
|
34313
|
+
"pattern": "\\bSlowBuffer\\b",
|
|
34314
|
+
"deprecatedIn": "24.0.0",
|
|
34315
|
+
"deprecatedOn": "2025-05-06",
|
|
34316
|
+
"removedIn": "25.0.0",
|
|
34317
|
+
"removedOn": "2025-10-15",
|
|
34318
|
+
"replacement": "Buffer.allocUnsafeSlow(size)",
|
|
34319
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0030",
|
|
34320
|
+
"read": "2026-10-19"
|
|
34321
|
+
},
|
|
34322
|
+
{
|
|
34323
|
+
"id": "DEP0031",
|
|
34324
|
+
"ecosystem": "node",
|
|
34325
|
+
"pkg": "node",
|
|
34326
|
+
"pattern": "\\becdh\\.setPublicKey\\s*\\(",
|
|
34327
|
+
"deprecatedIn": "25.0.0",
|
|
34328
|
+
"deprecatedOn": "2025-10-15",
|
|
34329
|
+
"removedIn": null,
|
|
34330
|
+
"removedOn": null,
|
|
34331
|
+
"replacement": "what Node's page for DEP0031 names",
|
|
34332
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0031",
|
|
34333
|
+
"read": "2026-10-19"
|
|
34334
|
+
},
|
|
34335
|
+
{
|
|
34336
|
+
"id": "DEP0033",
|
|
34337
|
+
"ecosystem": "node",
|
|
34338
|
+
"pkg": "node",
|
|
34339
|
+
"pattern": "\\bEventEmitter\\.listenerCount\\s*\\(",
|
|
34340
|
+
"deprecatedIn": "3.2.0",
|
|
34341
|
+
"deprecatedOn": "2026-10-19",
|
|
34342
|
+
"removedIn": null,
|
|
34343
|
+
"removedOn": null,
|
|
34344
|
+
"replacement": "what Node's page for DEP0033 names",
|
|
34345
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0033",
|
|
34346
|
+
"read": "2026-10-19"
|
|
34347
|
+
},
|
|
34348
|
+
{
|
|
34349
|
+
"id": "DEP0039",
|
|
34350
|
+
"ecosystem": "node",
|
|
34351
|
+
"pkg": "node",
|
|
34352
|
+
"pattern": "\\brequire\\.extensions\\b",
|
|
34353
|
+
"deprecatedIn": "0.10.6",
|
|
34354
|
+
"deprecatedOn": "2013-05-14",
|
|
34355
|
+
"removedIn": null,
|
|
34356
|
+
"removedOn": null,
|
|
34357
|
+
"replacement": "what Node's page for DEP0039 names",
|
|
34358
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0039",
|
|
34359
|
+
"read": "2026-10-19"
|
|
34360
|
+
},
|
|
34361
|
+
{
|
|
34362
|
+
"id": "DEP0042",
|
|
34363
|
+
"ecosystem": "node",
|
|
34364
|
+
"pkg": "node",
|
|
34365
|
+
"pattern": "(?:\\btls\\.|(?<![\\w$.]))CryptoStream\\b",
|
|
34366
|
+
"deprecatedIn": "0.11.3",
|
|
34367
|
+
"deprecatedOn": "2013-06-26",
|
|
34368
|
+
"removedIn": "10.0.0",
|
|
34369
|
+
"removedOn": "2018-04-24",
|
|
34370
|
+
"replacement": "tls.TLSSocket",
|
|
34371
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0042",
|
|
34372
|
+
"read": "2026-10-19"
|
|
34373
|
+
},
|
|
34374
|
+
{
|
|
34375
|
+
"id": "DEP0043",
|
|
34376
|
+
"ecosystem": "node",
|
|
34377
|
+
"pkg": "node",
|
|
34378
|
+
"pattern": "(?:\\btls\\.|(?<![\\w$.]))SecurePair\\b",
|
|
34379
|
+
"deprecatedIn": "8.0.0",
|
|
34380
|
+
"deprecatedOn": "2017-05-30",
|
|
34381
|
+
"removedIn": "24.0.0",
|
|
34382
|
+
"removedOn": "2025-05-06",
|
|
34383
|
+
"replacement": "tls.TLSSocket",
|
|
34384
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0043",
|
|
34385
|
+
"read": "2026-10-19"
|
|
34386
|
+
},
|
|
34387
|
+
{
|
|
34388
|
+
"id": "DEP0044",
|
|
34389
|
+
"ecosystem": "node",
|
|
34390
|
+
"pkg": "node",
|
|
34391
|
+
"pattern": "\\butil\\.isArray\\s*\\(",
|
|
34392
|
+
"deprecatedIn": "22.0.0",
|
|
34393
|
+
"deprecatedOn": "2024-04-24",
|
|
34394
|
+
"removedIn": null,
|
|
34395
|
+
"removedOn": null,
|
|
34396
|
+
"replacement": "Array.isArray()",
|
|
34397
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0044",
|
|
34398
|
+
"read": "2026-10-19"
|
|
34399
|
+
},
|
|
34400
|
+
{
|
|
34401
|
+
"id": "DEP0045",
|
|
34402
|
+
"ecosystem": "node",
|
|
34403
|
+
"pkg": "node",
|
|
34404
|
+
"pattern": "\\butil\\.isBoolean\\s*\\(",
|
|
34405
|
+
"deprecatedIn": "22.0.0",
|
|
34406
|
+
"deprecatedOn": "2024-04-24",
|
|
34407
|
+
"removedIn": "23.0.0",
|
|
34408
|
+
"removedOn": "2024-10-16",
|
|
34409
|
+
"replacement": "typeof arg === 'boolean'",
|
|
34410
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0045",
|
|
34411
|
+
"read": "2026-10-19"
|
|
34412
|
+
},
|
|
34413
|
+
{
|
|
34414
|
+
"id": "DEP0046",
|
|
34415
|
+
"ecosystem": "node",
|
|
34416
|
+
"pkg": "node",
|
|
34417
|
+
"pattern": "\\butil\\.isBuffer\\s*\\(",
|
|
34418
|
+
"deprecatedIn": "22.0.0",
|
|
34419
|
+
"deprecatedOn": "2024-04-24",
|
|
34420
|
+
"removedIn": "23.0.0",
|
|
34421
|
+
"removedOn": "2024-10-16",
|
|
34422
|
+
"replacement": "Buffer.isBuffer()",
|
|
34423
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0046",
|
|
34424
|
+
"read": "2026-10-19"
|
|
34425
|
+
},
|
|
34426
|
+
{
|
|
34427
|
+
"id": "DEP0047",
|
|
34428
|
+
"ecosystem": "node",
|
|
34429
|
+
"pkg": "node",
|
|
34430
|
+
"pattern": "\\butil\\.isDate\\s*\\(",
|
|
34431
|
+
"deprecatedIn": "22.0.0",
|
|
34432
|
+
"deprecatedOn": "2024-04-24",
|
|
34433
|
+
"removedIn": "23.0.0",
|
|
34434
|
+
"removedOn": "2024-10-16",
|
|
34435
|
+
"replacement": "arg instanceof Date",
|
|
34436
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0047",
|
|
34437
|
+
"read": "2026-10-19"
|
|
34438
|
+
},
|
|
34439
|
+
{
|
|
34440
|
+
"id": "DEP0048",
|
|
34441
|
+
"ecosystem": "node",
|
|
34442
|
+
"pkg": "node",
|
|
34443
|
+
"pattern": "\\butil\\.isError\\s*\\(",
|
|
34444
|
+
"deprecatedIn": "22.0.0",
|
|
34445
|
+
"deprecatedOn": "2024-04-24",
|
|
34446
|
+
"removedIn": "23.0.0",
|
|
34447
|
+
"removedOn": "2024-10-16",
|
|
34448
|
+
"replacement": "Error.isError(arg)",
|
|
34449
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0048",
|
|
34450
|
+
"read": "2026-10-19"
|
|
34451
|
+
},
|
|
34452
|
+
{
|
|
34453
|
+
"id": "DEP0049",
|
|
34454
|
+
"ecosystem": "node",
|
|
34455
|
+
"pkg": "node",
|
|
34456
|
+
"pattern": "\\butil\\.isFunction\\s*\\(",
|
|
34457
|
+
"deprecatedIn": "22.0.0",
|
|
34458
|
+
"deprecatedOn": "2024-04-24",
|
|
34459
|
+
"removedIn": "23.0.0",
|
|
34460
|
+
"removedOn": "2024-10-16",
|
|
34461
|
+
"replacement": "typeof arg === 'function'",
|
|
34462
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0049",
|
|
34463
|
+
"read": "2026-10-19"
|
|
34464
|
+
},
|
|
34465
|
+
{
|
|
34466
|
+
"id": "DEP0050",
|
|
34467
|
+
"ecosystem": "node",
|
|
34468
|
+
"pkg": "node",
|
|
34469
|
+
"pattern": "\\butil\\.isNull\\s*\\(",
|
|
34470
|
+
"deprecatedIn": "22.0.0",
|
|
34471
|
+
"deprecatedOn": "2024-04-24",
|
|
34472
|
+
"removedIn": "23.0.0",
|
|
34473
|
+
"removedOn": "2024-10-16",
|
|
34474
|
+
"replacement": "arg === null",
|
|
34475
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0050",
|
|
34476
|
+
"read": "2026-10-19"
|
|
34477
|
+
},
|
|
34478
|
+
{
|
|
34479
|
+
"id": "DEP0051",
|
|
34480
|
+
"ecosystem": "node",
|
|
34481
|
+
"pkg": "node",
|
|
34482
|
+
"pattern": "\\butil\\.isNullOrUndefined\\s*\\(",
|
|
34483
|
+
"deprecatedIn": "22.0.0",
|
|
34484
|
+
"deprecatedOn": "2024-04-24",
|
|
34485
|
+
"removedIn": "23.0.0",
|
|
34486
|
+
"removedOn": "2024-10-16",
|
|
34487
|
+
"replacement": "arg === null || arg === undefined",
|
|
34488
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0051",
|
|
34489
|
+
"read": "2026-10-19"
|
|
34490
|
+
},
|
|
34491
|
+
{
|
|
34492
|
+
"id": "DEP0052",
|
|
34493
|
+
"ecosystem": "node",
|
|
34494
|
+
"pkg": "node",
|
|
34495
|
+
"pattern": "\\butil\\.isNumber\\s*\\(",
|
|
34496
|
+
"deprecatedIn": "22.0.0",
|
|
34497
|
+
"deprecatedOn": "2024-04-24",
|
|
34498
|
+
"removedIn": "23.0.0",
|
|
34499
|
+
"removedOn": "2024-10-16",
|
|
34500
|
+
"replacement": "typeof arg === 'number'",
|
|
34501
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0052",
|
|
34502
|
+
"read": "2026-10-19"
|
|
34503
|
+
},
|
|
34504
|
+
{
|
|
34505
|
+
"id": "DEP0053",
|
|
34506
|
+
"ecosystem": "node",
|
|
34507
|
+
"pkg": "node",
|
|
34508
|
+
"pattern": "\\butil\\.isObject\\s*\\(",
|
|
34509
|
+
"deprecatedIn": "22.0.0",
|
|
34510
|
+
"deprecatedOn": "2024-04-24",
|
|
34511
|
+
"removedIn": "23.0.0",
|
|
34512
|
+
"removedOn": "2024-10-16",
|
|
34513
|
+
"replacement": "arg && typeof arg === 'object'",
|
|
34514
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0053",
|
|
34515
|
+
"read": "2026-10-19"
|
|
34516
|
+
},
|
|
34517
|
+
{
|
|
34518
|
+
"id": "DEP0054",
|
|
34519
|
+
"ecosystem": "node",
|
|
34520
|
+
"pkg": "node",
|
|
34521
|
+
"pattern": "\\butil\\.isPrimitive\\s*\\(",
|
|
34522
|
+
"deprecatedIn": "22.0.0",
|
|
34523
|
+
"deprecatedOn": "2024-04-24",
|
|
34524
|
+
"removedIn": "23.0.0",
|
|
34525
|
+
"removedOn": "2024-10-16",
|
|
34526
|
+
"replacement": "Object(arg) !== arg",
|
|
34527
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0054",
|
|
34528
|
+
"read": "2026-10-19"
|
|
34529
|
+
},
|
|
34530
|
+
{
|
|
34531
|
+
"id": "DEP0055",
|
|
34532
|
+
"ecosystem": "node",
|
|
34533
|
+
"pkg": "node",
|
|
34534
|
+
"pattern": "\\butil\\.isRegExp\\s*\\(",
|
|
34535
|
+
"deprecatedIn": "22.0.0",
|
|
34536
|
+
"deprecatedOn": "2024-04-24",
|
|
34537
|
+
"removedIn": "23.0.0",
|
|
34538
|
+
"removedOn": "2024-10-16",
|
|
34539
|
+
"replacement": "arg instanceof RegExp",
|
|
34540
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0055",
|
|
34541
|
+
"read": "2026-10-19"
|
|
34542
|
+
},
|
|
34543
|
+
{
|
|
34544
|
+
"id": "DEP0056",
|
|
34545
|
+
"ecosystem": "node",
|
|
34546
|
+
"pkg": "node",
|
|
34547
|
+
"pattern": "\\butil\\.isString\\s*\\(",
|
|
34548
|
+
"deprecatedIn": "22.0.0",
|
|
34549
|
+
"deprecatedOn": "2024-04-24",
|
|
34550
|
+
"removedIn": "23.0.0",
|
|
34551
|
+
"removedOn": "2024-10-16",
|
|
34552
|
+
"replacement": "typeof arg === 'string'",
|
|
34553
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0056",
|
|
34554
|
+
"read": "2026-10-19"
|
|
34555
|
+
},
|
|
34556
|
+
{
|
|
34557
|
+
"id": "DEP0057",
|
|
34558
|
+
"ecosystem": "node",
|
|
34559
|
+
"pkg": "node",
|
|
34560
|
+
"pattern": "\\butil\\.isSymbol\\s*\\(",
|
|
34561
|
+
"deprecatedIn": "22.0.0",
|
|
34562
|
+
"deprecatedOn": "2024-04-24",
|
|
34563
|
+
"removedIn": "23.0.0",
|
|
34564
|
+
"removedOn": "2024-10-16",
|
|
34565
|
+
"replacement": "typeof arg === 'symbol'",
|
|
34566
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0057",
|
|
34567
|
+
"read": "2026-10-19"
|
|
34568
|
+
},
|
|
34569
|
+
{
|
|
34570
|
+
"id": "DEP0058",
|
|
34571
|
+
"ecosystem": "node",
|
|
34572
|
+
"pkg": "node",
|
|
34573
|
+
"pattern": "\\butil\\.isUndefined\\s*\\(",
|
|
34574
|
+
"deprecatedIn": "22.0.0",
|
|
34575
|
+
"deprecatedOn": "2024-04-24",
|
|
34576
|
+
"removedIn": "23.0.0",
|
|
34577
|
+
"removedOn": "2024-10-16",
|
|
34578
|
+
"replacement": "arg === undefined",
|
|
34579
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0058",
|
|
34580
|
+
"read": "2026-10-19"
|
|
34581
|
+
},
|
|
34582
|
+
{
|
|
34583
|
+
"id": "DEP0059",
|
|
34584
|
+
"ecosystem": "node",
|
|
34585
|
+
"pkg": "node",
|
|
34586
|
+
"pattern": "\\butil\\.log\\s*\\(",
|
|
34587
|
+
"deprecatedIn": "22.0.0",
|
|
34588
|
+
"deprecatedOn": "2024-04-24",
|
|
34589
|
+
"removedIn": "23.0.0",
|
|
34590
|
+
"removedOn": "2024-10-16",
|
|
34591
|
+
"replacement": "console.log(new Date().toLocaleString(), message)",
|
|
34592
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0059",
|
|
34593
|
+
"read": "2026-10-19"
|
|
34594
|
+
},
|
|
34595
|
+
{
|
|
34596
|
+
"id": "DEP0060",
|
|
34597
|
+
"ecosystem": "node",
|
|
34598
|
+
"pkg": "node",
|
|
34599
|
+
"pattern": "\\butil\\._extend\\s*\\(",
|
|
34600
|
+
"deprecatedIn": "22.0.0",
|
|
34601
|
+
"deprecatedOn": "2024-04-24",
|
|
34602
|
+
"removedIn": null,
|
|
34603
|
+
"removedOn": null,
|
|
34604
|
+
"replacement": "target = Object.assign(target, source)",
|
|
34605
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0060",
|
|
34606
|
+
"read": "2026-10-19"
|
|
34607
|
+
},
|
|
34608
|
+
{
|
|
34609
|
+
"id": "DEP0061",
|
|
34610
|
+
"ecosystem": "node",
|
|
34611
|
+
"pkg": "node",
|
|
34612
|
+
"pattern": "(?:\\bfs\\.|(?<![\\w$.]))SyncWriteStream\\b",
|
|
34613
|
+
"deprecatedIn": "8.0.0",
|
|
34614
|
+
"deprecatedOn": "2017-05-30",
|
|
34615
|
+
"removedIn": "11.0.0",
|
|
34616
|
+
"removedOn": "2018-10-23",
|
|
34617
|
+
"replacement": "what Node's page for DEP0061 names",
|
|
34618
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0061",
|
|
34619
|
+
"read": "2026-10-19"
|
|
34620
|
+
},
|
|
34621
|
+
{
|
|
34622
|
+
"id": "DEP0063",
|
|
34623
|
+
"ecosystem": "node",
|
|
34624
|
+
"pkg": "node",
|
|
34625
|
+
"pattern": "\\bServerResponse\\.prototype\\.writeHeader\\s*\\(",
|
|
34626
|
+
"deprecatedIn": "25.0.0",
|
|
34627
|
+
"deprecatedOn": "2025-10-15",
|
|
34628
|
+
"removedIn": "26.0.0",
|
|
34629
|
+
"removedOn": "2026-05-05",
|
|
34630
|
+
"replacement": "ServerResponse.prototype.writeHead()",
|
|
34631
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0063",
|
|
34632
|
+
"read": "2026-10-19"
|
|
34633
|
+
},
|
|
34634
|
+
{
|
|
34635
|
+
"id": "DEP0064",
|
|
34636
|
+
"ecosystem": "node",
|
|
34637
|
+
"pkg": "node",
|
|
34638
|
+
"pattern": "\\btls\\.createSecurePair\\s*\\(",
|
|
34639
|
+
"deprecatedIn": "8.0.0",
|
|
34640
|
+
"deprecatedOn": "2017-05-30",
|
|
34641
|
+
"removedIn": "24.0.0",
|
|
34642
|
+
"removedOn": "2025-05-06",
|
|
34643
|
+
"replacement": "tls.Socket",
|
|
34644
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0064",
|
|
34645
|
+
"read": "2026-10-19"
|
|
34646
|
+
},
|
|
34647
|
+
{
|
|
34648
|
+
"id": "DEP0065",
|
|
34649
|
+
"ecosystem": "node",
|
|
34650
|
+
"pkg": "node",
|
|
34651
|
+
"pattern": "(?:\\brepl\\.|(?<![\\w$.]))REPL_MODE_MAGIC\\b",
|
|
34652
|
+
"deprecatedIn": "8.0.0",
|
|
34653
|
+
"deprecatedOn": "2017-05-30",
|
|
34654
|
+
"removedIn": "10.0.0",
|
|
34655
|
+
"removedOn": "2018-04-24",
|
|
34656
|
+
"replacement": "REPL_MODE_SLOPPY",
|
|
34657
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0065",
|
|
34658
|
+
"read": "2026-10-19"
|
|
34659
|
+
},
|
|
34660
|
+
{
|
|
34661
|
+
"id": "DEP0067",
|
|
34662
|
+
"ecosystem": "node",
|
|
34663
|
+
"pkg": "node",
|
|
34664
|
+
"pattern": "\\._renderHeaders\\b",
|
|
34665
|
+
"deprecatedIn": "8.0.0",
|
|
34666
|
+
"deprecatedOn": "2017-05-30",
|
|
34667
|
+
"removedIn": null,
|
|
34668
|
+
"removedOn": null,
|
|
34669
|
+
"replacement": "what Node's page for DEP0067 names",
|
|
34670
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0067",
|
|
34671
|
+
"read": "2026-10-19"
|
|
34672
|
+
},
|
|
34673
|
+
{
|
|
34674
|
+
"id": "DEP0070",
|
|
34675
|
+
"ecosystem": "node",
|
|
34676
|
+
"pkg": "node",
|
|
34677
|
+
"pattern": "\\basync_hooks\\.currentId\\s*\\(",
|
|
34678
|
+
"deprecatedIn": "8.2.0",
|
|
34679
|
+
"deprecatedOn": "2017-07-19",
|
|
34680
|
+
"removedIn": "9.0.0",
|
|
34681
|
+
"removedOn": "2017-10-31",
|
|
34682
|
+
"replacement": "what Node's page for DEP0070 names",
|
|
34683
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0070",
|
|
34684
|
+
"read": "2026-10-19"
|
|
34685
|
+
},
|
|
34686
|
+
{
|
|
34687
|
+
"id": "DEP0071",
|
|
34688
|
+
"ecosystem": "node",
|
|
34689
|
+
"pkg": "node",
|
|
34690
|
+
"pattern": "\\basync_hooks\\.triggerId\\s*\\(",
|
|
34691
|
+
"deprecatedIn": "8.2.0",
|
|
34692
|
+
"deprecatedOn": "2017-07-19",
|
|
34693
|
+
"removedIn": "9.0.0",
|
|
34694
|
+
"removedOn": "2017-10-31",
|
|
34695
|
+
"replacement": "what Node's page for DEP0071 names",
|
|
34696
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0071",
|
|
34697
|
+
"read": "2026-10-19"
|
|
34698
|
+
},
|
|
34699
|
+
{
|
|
34700
|
+
"id": "DEP0072",
|
|
34701
|
+
"ecosystem": "node",
|
|
34702
|
+
"pkg": "node",
|
|
34703
|
+
"pattern": "\\basync_hooks\\.AsyncResource\\.triggerId\\s*\\(",
|
|
34704
|
+
"deprecatedIn": "8.2.0",
|
|
34705
|
+
"deprecatedOn": "2017-07-19",
|
|
34706
|
+
"removedIn": "9.0.0",
|
|
34707
|
+
"removedOn": "2017-10-31",
|
|
34708
|
+
"replacement": "what Node's page for DEP0072 names",
|
|
34709
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0072",
|
|
34710
|
+
"read": "2026-10-19"
|
|
34711
|
+
},
|
|
34712
|
+
{
|
|
34713
|
+
"id": "DEP0074",
|
|
34714
|
+
"ecosystem": "node",
|
|
34715
|
+
"pkg": "node",
|
|
34716
|
+
"pattern": "\\bREPLServer\\.bufferedCommand\\b",
|
|
34717
|
+
"deprecatedIn": "9.0.0",
|
|
34718
|
+
"deprecatedOn": "2017-10-31",
|
|
34719
|
+
"removedIn": "15.0.0",
|
|
34720
|
+
"removedOn": "2020-10-20",
|
|
34721
|
+
"replacement": "what Node's page for DEP0074 names",
|
|
34722
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0074",
|
|
34723
|
+
"read": "2026-10-19"
|
|
34724
|
+
},
|
|
34725
|
+
{
|
|
34726
|
+
"id": "DEP0075",
|
|
34727
|
+
"ecosystem": "node",
|
|
34728
|
+
"pkg": "node",
|
|
34729
|
+
"pattern": "\\bREPLServer\\.parseREPLKeyword\\s*\\(",
|
|
34730
|
+
"deprecatedIn": "9.0.0",
|
|
34731
|
+
"deprecatedOn": "2017-10-31",
|
|
34732
|
+
"removedIn": "15.0.0",
|
|
34733
|
+
"removedOn": "2020-10-20",
|
|
34734
|
+
"replacement": "what Node's page for DEP0075 names",
|
|
34735
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0075",
|
|
34736
|
+
"read": "2026-10-19"
|
|
34737
|
+
},
|
|
34738
|
+
{
|
|
34739
|
+
"id": "DEP0076",
|
|
34740
|
+
"ecosystem": "node",
|
|
34741
|
+
"pkg": "node",
|
|
34742
|
+
"pattern": "\\btls\\.parseCertString\\s*\\(",
|
|
34743
|
+
"deprecatedIn": "9.0.0",
|
|
34744
|
+
"deprecatedOn": "2017-10-31",
|
|
34745
|
+
"removedIn": "18.0.0",
|
|
34746
|
+
"removedOn": "2022-04-18",
|
|
34747
|
+
"replacement": "what Node's page for DEP0076 names",
|
|
34748
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0076",
|
|
34749
|
+
"read": "2026-10-19"
|
|
34750
|
+
},
|
|
34751
|
+
{
|
|
34752
|
+
"id": "DEP0077",
|
|
34753
|
+
"ecosystem": "node",
|
|
34754
|
+
"pkg": "node",
|
|
34755
|
+
"pattern": "\\bModule\\._debug\\s*\\(",
|
|
34756
|
+
"deprecatedIn": "9.0.0",
|
|
34757
|
+
"deprecatedOn": "2017-10-31",
|
|
34758
|
+
"removedIn": "25.0.0",
|
|
34759
|
+
"removedOn": "2025-10-15",
|
|
34760
|
+
"replacement": "what Node's page for DEP0077 names",
|
|
34761
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0077",
|
|
34762
|
+
"read": "2026-10-19"
|
|
34763
|
+
},
|
|
34764
|
+
{
|
|
34765
|
+
"id": "DEP0078",
|
|
34766
|
+
"ecosystem": "node",
|
|
34767
|
+
"pkg": "node",
|
|
34768
|
+
"pattern": "\\bREPLServer\\.turnOffEditorMode\\s*\\(",
|
|
34769
|
+
"deprecatedIn": "9.0.0",
|
|
34770
|
+
"deprecatedOn": "2017-10-31",
|
|
34771
|
+
"removedIn": "15.0.0",
|
|
34772
|
+
"removedOn": "2020-10-20",
|
|
34773
|
+
"replacement": "what Node's page for DEP0078 names",
|
|
34774
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0078",
|
|
34775
|
+
"read": "2026-10-19"
|
|
34776
|
+
},
|
|
34777
|
+
{
|
|
34778
|
+
"id": "DEP0080",
|
|
34779
|
+
"ecosystem": "node",
|
|
34780
|
+
"pkg": "node",
|
|
34781
|
+
"pattern": "\\bpath\\._makeLong\\s*\\(",
|
|
34782
|
+
"deprecatedIn": "9.0.0",
|
|
34783
|
+
"deprecatedOn": "2017-10-31",
|
|
34784
|
+
"removedIn": null,
|
|
34785
|
+
"removedOn": null,
|
|
34786
|
+
"replacement": "what Node's page for DEP0080 names",
|
|
34787
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0080",
|
|
34788
|
+
"read": "2026-10-19"
|
|
34789
|
+
},
|
|
34790
|
+
{
|
|
34791
|
+
"id": "DEP0081",
|
|
34792
|
+
"ecosystem": "node",
|
|
34793
|
+
"pkg": "node",
|
|
34794
|
+
"pattern": "\\bfs\\.truncate\\s*\\(",
|
|
34795
|
+
"deprecatedIn": "9.0.0",
|
|
34796
|
+
"deprecatedOn": "2017-10-31",
|
|
34797
|
+
"removedIn": "24.0.0",
|
|
34798
|
+
"removedOn": "2025-05-06",
|
|
34799
|
+
"replacement": "fs.ftruncate()",
|
|
34800
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0081",
|
|
34801
|
+
"read": "2026-10-19"
|
|
34802
|
+
},
|
|
34803
|
+
{
|
|
34804
|
+
"id": "DEP0082",
|
|
34805
|
+
"ecosystem": "node",
|
|
34806
|
+
"pkg": "node",
|
|
34807
|
+
"pattern": "\\bREPLServer\\.prototype\\.memory\\s*\\(",
|
|
34808
|
+
"deprecatedIn": "9.0.0",
|
|
34809
|
+
"deprecatedOn": "2017-10-31",
|
|
34810
|
+
"removedIn": "15.0.0",
|
|
34811
|
+
"removedOn": "2020-10-20",
|
|
34812
|
+
"replacement": "what Node's page for DEP0082 names",
|
|
34813
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0082",
|
|
34814
|
+
"read": "2026-10-19"
|
|
34815
|
+
},
|
|
34816
|
+
{
|
|
34817
|
+
"id": "DEP0089",
|
|
34818
|
+
"ecosystem": "node",
|
|
34819
|
+
"pkg": "node",
|
|
34820
|
+
"pattern": "(?:require\\s*\\(|import\\s*\\(|from)\\s*['\"](?:node:)?assert['\"]",
|
|
34821
|
+
"deprecatedIn": "9.9.0",
|
|
34822
|
+
"deprecatedOn": "2018-03-21",
|
|
34823
|
+
"removedIn": null,
|
|
34824
|
+
"removedOn": null,
|
|
34825
|
+
"replacement": "what Node's page for DEP0089 names",
|
|
34826
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0089",
|
|
34827
|
+
"read": "2026-10-19"
|
|
34828
|
+
},
|
|
34829
|
+
{
|
|
34830
|
+
"id": "DEP0091",
|
|
34831
|
+
"ecosystem": "node",
|
|
34832
|
+
"pkg": "node",
|
|
34833
|
+
"pattern": "(?:\\bcrypto\\.|(?<![\\w$.]))DEFAULT_ENCODING\\b",
|
|
34834
|
+
"deprecatedIn": "10.0.0",
|
|
34835
|
+
"deprecatedOn": "2018-04-24",
|
|
34836
|
+
"removedIn": "20.0.0",
|
|
34837
|
+
"removedOn": "2023-04-17",
|
|
34838
|
+
"replacement": "what Node's page for DEP0091 names",
|
|
34839
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0091",
|
|
34840
|
+
"read": "2026-10-19"
|
|
34841
|
+
},
|
|
34842
|
+
{
|
|
34843
|
+
"id": "DEP0095",
|
|
34844
|
+
"ecosystem": "node",
|
|
34845
|
+
"pkg": "node",
|
|
34846
|
+
"pattern": "\\btimers\\.enroll\\s*\\(",
|
|
34847
|
+
"deprecatedIn": "10.0.0",
|
|
34848
|
+
"deprecatedOn": "2018-04-24",
|
|
34849
|
+
"removedIn": "24.0.0",
|
|
34850
|
+
"removedOn": "2025-05-06",
|
|
34851
|
+
"replacement": "what Node's page for DEP0095 names",
|
|
34852
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0095",
|
|
34853
|
+
"read": "2026-10-19"
|
|
34854
|
+
},
|
|
34855
|
+
{
|
|
34856
|
+
"id": "DEP0096",
|
|
34857
|
+
"ecosystem": "node",
|
|
34858
|
+
"pkg": "node",
|
|
34859
|
+
"pattern": "\\btimers\\.unenroll\\s*\\(",
|
|
34860
|
+
"deprecatedIn": "10.0.0",
|
|
34861
|
+
"deprecatedOn": "2018-04-24",
|
|
34862
|
+
"removedIn": "24.0.0",
|
|
34863
|
+
"removedOn": "2025-05-06",
|
|
34864
|
+
"replacement": "what Node's page for DEP0096 names",
|
|
34865
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0096",
|
|
34866
|
+
"read": "2026-10-19"
|
|
34867
|
+
},
|
|
34868
|
+
{
|
|
34869
|
+
"id": "DEP0100",
|
|
34870
|
+
"ecosystem": "node",
|
|
34871
|
+
"pkg": "node",
|
|
34872
|
+
"pattern": "\\bprocess\\.assert\\s*\\(",
|
|
34873
|
+
"deprecatedIn": "10.0.0",
|
|
34874
|
+
"deprecatedOn": "2018-04-24",
|
|
34875
|
+
"removedIn": "23.0.0",
|
|
34876
|
+
"removedOn": "2024-10-16",
|
|
34877
|
+
"replacement": "what Node's page for DEP0100 names",
|
|
34878
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0100",
|
|
34879
|
+
"read": "2026-10-19"
|
|
34880
|
+
},
|
|
34881
|
+
{
|
|
34882
|
+
"id": "DEP0105",
|
|
34883
|
+
"ecosystem": "node",
|
|
34884
|
+
"pkg": "node",
|
|
34885
|
+
"pattern": "\\bdecipher\\.finaltol\\b",
|
|
34886
|
+
"deprecatedIn": "10.0.0",
|
|
34887
|
+
"deprecatedOn": "2018-04-24",
|
|
34888
|
+
"removedIn": "11.0.0",
|
|
34889
|
+
"removedOn": "2018-10-23",
|
|
34890
|
+
"replacement": "decipher.final()",
|
|
34891
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0105",
|
|
34892
|
+
"read": "2026-10-19"
|
|
34893
|
+
},
|
|
34894
|
+
{
|
|
34895
|
+
"id": "DEP0106",
|
|
34896
|
+
"ecosystem": "node",
|
|
34897
|
+
"pkg": "node",
|
|
34898
|
+
"pattern": "(?:\\bcrypto\\.|(?<![\\w$.]))createCipher\\b|(?:\\bcrypto\\.|(?<![\\w$.]))createDecipher\\b",
|
|
34899
|
+
"deprecatedIn": "11.0.0",
|
|
34900
|
+
"deprecatedOn": "2018-10-23",
|
|
34901
|
+
"removedIn": "22.0.0",
|
|
34902
|
+
"removedOn": "2024-04-24",
|
|
34903
|
+
"replacement": "crypto.createCipheriv()",
|
|
34904
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0106",
|
|
34905
|
+
"read": "2026-10-19"
|
|
34906
|
+
},
|
|
34907
|
+
{
|
|
34908
|
+
"id": "DEP0107",
|
|
34909
|
+
"ecosystem": "node",
|
|
34910
|
+
"pkg": "node",
|
|
34911
|
+
"pattern": "\\btls\\.convertNPNProtocols\\s*\\(",
|
|
34912
|
+
"deprecatedIn": "10.0.0",
|
|
34913
|
+
"deprecatedOn": "2018-04-24",
|
|
34914
|
+
"removedIn": "11.0.0",
|
|
34915
|
+
"removedOn": "2018-10-23",
|
|
34916
|
+
"replacement": "what Node's page for DEP0107 names",
|
|
34917
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0107",
|
|
34918
|
+
"read": "2026-10-19"
|
|
34919
|
+
},
|
|
34920
|
+
{
|
|
34921
|
+
"id": "DEP0108",
|
|
34922
|
+
"ecosystem": "node",
|
|
34923
|
+
"pkg": "node",
|
|
34924
|
+
"pattern": "(?:\\bzlib\\.|(?<![\\w$.]))bytesRead\\b",
|
|
34925
|
+
"deprecatedIn": "11.0.0",
|
|
34926
|
+
"deprecatedOn": "2018-10-23",
|
|
34927
|
+
"removedIn": "23.0.0",
|
|
34928
|
+
"removedOn": "2024-10-16",
|
|
34929
|
+
"replacement": "what Node's page for DEP0108 names",
|
|
34930
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0108",
|
|
34931
|
+
"read": "2026-10-19"
|
|
34932
|
+
},
|
|
34933
|
+
{
|
|
34934
|
+
"id": "DEP0111",
|
|
34935
|
+
"ecosystem": "node",
|
|
34936
|
+
"pkg": "node",
|
|
34937
|
+
"pattern": "\\bprocess\\.binding\\s*\\(",
|
|
34938
|
+
"deprecatedIn": "10.9.0",
|
|
34939
|
+
"deprecatedOn": "2018-08-15",
|
|
34940
|
+
"removedIn": null,
|
|
34941
|
+
"removedOn": null,
|
|
34942
|
+
"replacement": "what Node's page for DEP0111 names",
|
|
34943
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0111",
|
|
34944
|
+
"read": "2026-10-19"
|
|
34945
|
+
},
|
|
34946
|
+
{
|
|
34947
|
+
"id": "DEP0113",
|
|
34948
|
+
"ecosystem": "node",
|
|
34949
|
+
"pkg": "node",
|
|
34950
|
+
"pattern": "\\bCipher\\.setAuthTag\\s*\\(",
|
|
34951
|
+
"deprecatedIn": "11.0.0",
|
|
34952
|
+
"deprecatedOn": "2018-10-23",
|
|
34953
|
+
"removedIn": "12.0.0",
|
|
34954
|
+
"removedOn": "2019-04-23",
|
|
34955
|
+
"replacement": "what Node's page for DEP0113 names",
|
|
34956
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0113",
|
|
34957
|
+
"read": "2026-10-19"
|
|
34958
|
+
},
|
|
34959
|
+
{
|
|
34960
|
+
"id": "DEP0114",
|
|
34961
|
+
"ecosystem": "node",
|
|
34962
|
+
"pkg": "node",
|
|
34963
|
+
"pattern": "\\bcrypto\\._toBuf\\s*\\(",
|
|
34964
|
+
"deprecatedIn": "11.0.0",
|
|
34965
|
+
"deprecatedOn": "2018-10-23",
|
|
34966
|
+
"removedIn": "12.0.0",
|
|
34967
|
+
"removedOn": "2019-04-23",
|
|
34968
|
+
"replacement": "what Node's page for DEP0114 names",
|
|
34969
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0114",
|
|
34970
|
+
"read": "2026-10-19"
|
|
34971
|
+
},
|
|
34972
|
+
{
|
|
34973
|
+
"id": "DEP0115",
|
|
34974
|
+
"ecosystem": "node",
|
|
34975
|
+
"pkg": "node",
|
|
34976
|
+
"pattern": "\\bcrypto\\.prng\\s*\\(",
|
|
34977
|
+
"deprecatedIn": "11.0.0",
|
|
34978
|
+
"deprecatedOn": "2018-10-23",
|
|
34979
|
+
"removedIn": null,
|
|
34980
|
+
"removedOn": null,
|
|
34981
|
+
"replacement": "what Node's page for DEP0115 names",
|
|
34982
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0115",
|
|
34983
|
+
"read": "2026-10-19"
|
|
34984
|
+
},
|
|
34985
|
+
{
|
|
34986
|
+
"id": "DEP0118",
|
|
34987
|
+
"ecosystem": "node",
|
|
34988
|
+
"pkg": "node",
|
|
34989
|
+
"pattern": "\\bdns\\.lookup\\s*\\(",
|
|
34990
|
+
"deprecatedIn": "11.0.0",
|
|
34991
|
+
"deprecatedOn": "2018-10-23",
|
|
34992
|
+
"removedIn": "25.0.0",
|
|
34993
|
+
"removedOn": "2025-10-15",
|
|
34994
|
+
"replacement": "what Node's page for DEP0118 names",
|
|
34995
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0118",
|
|
34996
|
+
"read": "2026-10-19"
|
|
34997
|
+
},
|
|
34998
|
+
{
|
|
34999
|
+
"id": "DEP0121",
|
|
35000
|
+
"ecosystem": "node",
|
|
35001
|
+
"pkg": "node",
|
|
35002
|
+
"pattern": "\\bnet\\._setSimultaneousAccepts\\s*\\(",
|
|
35003
|
+
"deprecatedIn": "12.0.0",
|
|
35004
|
+
"deprecatedOn": "2019-04-23",
|
|
35005
|
+
"removedIn": "24.0.0",
|
|
35006
|
+
"removedOn": "2025-05-06",
|
|
35007
|
+
"replacement": "what Node's page for DEP0121 names",
|
|
35008
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0121",
|
|
35009
|
+
"read": "2026-10-19"
|
|
35010
|
+
},
|
|
35011
|
+
{
|
|
35012
|
+
"id": "DEP0122",
|
|
35013
|
+
"ecosystem": "node",
|
|
35014
|
+
"pkg": "node",
|
|
35015
|
+
"pattern": "\\bServer\\.prototype\\.setOptions\\s*\\(",
|
|
35016
|
+
"deprecatedIn": "12.0.0",
|
|
35017
|
+
"deprecatedOn": "2019-04-23",
|
|
35018
|
+
"removedIn": "24.0.0",
|
|
35019
|
+
"removedOn": "2025-05-06",
|
|
35020
|
+
"replacement": "Server.prototype.setSecureContext()",
|
|
35021
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0122",
|
|
35022
|
+
"read": "2026-10-19"
|
|
35023
|
+
},
|
|
35024
|
+
{
|
|
35025
|
+
"id": "DEP0125",
|
|
35026
|
+
"ecosystem": "node",
|
|
35027
|
+
"pkg": "node",
|
|
35028
|
+
"pattern": "(?:require\\s*\\(|import\\s*\\(|from)\\s*['\"](?:node:)?_stream_wrap['\"]",
|
|
35029
|
+
"deprecatedIn": "12.0.0",
|
|
35030
|
+
"deprecatedOn": "2019-04-23",
|
|
35031
|
+
"removedIn": "26.0.0",
|
|
35032
|
+
"removedOn": "2026-05-05",
|
|
35033
|
+
"replacement": "what Node's page for DEP0125 names",
|
|
35034
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0125",
|
|
35035
|
+
"read": "2026-10-19"
|
|
35036
|
+
},
|
|
35037
|
+
{
|
|
35038
|
+
"id": "DEP0126",
|
|
35039
|
+
"ecosystem": "node",
|
|
35040
|
+
"pkg": "node",
|
|
35041
|
+
"pattern": "\\btimers\\.active\\s*\\(",
|
|
35042
|
+
"deprecatedIn": "11.14.0",
|
|
35043
|
+
"deprecatedOn": "2019-04-10",
|
|
35044
|
+
"removedIn": "24.0.0",
|
|
35045
|
+
"removedOn": "2025-05-06",
|
|
35046
|
+
"replacement": "what Node's page for DEP0126 names",
|
|
35047
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0126",
|
|
35048
|
+
"read": "2026-10-19"
|
|
35049
|
+
},
|
|
35050
|
+
{
|
|
35051
|
+
"id": "DEP0127",
|
|
35052
|
+
"ecosystem": "node",
|
|
35053
|
+
"pkg": "node",
|
|
35054
|
+
"pattern": "\\btimers\\._unrefActive\\s*\\(",
|
|
35055
|
+
"deprecatedIn": "11.14.0",
|
|
35056
|
+
"deprecatedOn": "2019-04-10",
|
|
35057
|
+
"removedIn": "24.0.0",
|
|
35058
|
+
"removedOn": "2025-05-06",
|
|
35059
|
+
"replacement": "what Node's page for DEP0127 names",
|
|
35060
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0127",
|
|
35061
|
+
"read": "2026-10-19"
|
|
35062
|
+
},
|
|
35063
|
+
{
|
|
35064
|
+
"id": "DEP0129",
|
|
35065
|
+
"ecosystem": "node",
|
|
35066
|
+
"pkg": "node",
|
|
35067
|
+
"pattern": "\\bChildProcess\\._channel\\b",
|
|
35068
|
+
"deprecatedIn": "13.0.0",
|
|
35069
|
+
"deprecatedOn": "2019-10-22",
|
|
35070
|
+
"removedIn": "25.0.0",
|
|
35071
|
+
"removedOn": "2025-10-15",
|
|
35072
|
+
"replacement": "ChildProcess.channel",
|
|
35073
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0129",
|
|
35074
|
+
"read": "2026-10-19"
|
|
35075
|
+
},
|
|
35076
|
+
{
|
|
35077
|
+
"id": "DEP0130",
|
|
35078
|
+
"ecosystem": "node",
|
|
35079
|
+
"pkg": "node",
|
|
35080
|
+
"pattern": "\\bModule\\.createRequireFromPath\\s*\\(",
|
|
35081
|
+
"deprecatedIn": "13.0.0",
|
|
35082
|
+
"deprecatedOn": "2019-10-22",
|
|
35083
|
+
"removedIn": "16.0.0",
|
|
35084
|
+
"removedOn": "2021-04-20",
|
|
35085
|
+
"replacement": "module.createRequire()",
|
|
35086
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0130",
|
|
35087
|
+
"read": "2026-10-19"
|
|
35088
|
+
},
|
|
35089
|
+
{
|
|
35090
|
+
"id": "DEP0132",
|
|
35091
|
+
"ecosystem": "node",
|
|
35092
|
+
"pkg": "node",
|
|
35093
|
+
"pattern": "\\bworker\\.terminate\\s*\\(",
|
|
35094
|
+
"deprecatedIn": "12.5.0",
|
|
35095
|
+
"deprecatedOn": "2019-06-26",
|
|
35096
|
+
"removedIn": "25.0.0",
|
|
35097
|
+
"removedOn": "2025-10-15",
|
|
35098
|
+
"replacement": "what Node's page for DEP0132 names",
|
|
35099
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0132",
|
|
35100
|
+
"read": "2026-10-19"
|
|
35101
|
+
},
|
|
35102
|
+
{
|
|
35103
|
+
"id": "DEP0134",
|
|
35104
|
+
"ecosystem": "node",
|
|
35105
|
+
"pkg": "node",
|
|
35106
|
+
"pattern": "(?:\\bprocess\\.|(?<![\\w$.]))_tickCallback\\b",
|
|
35107
|
+
"deprecatedIn": "12.12.0",
|
|
35108
|
+
"deprecatedOn": "2019-10-11",
|
|
35109
|
+
"removedIn": null,
|
|
35110
|
+
"removedOn": null,
|
|
35111
|
+
"replacement": "what Node's page for DEP0134 names",
|
|
35112
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0134",
|
|
35113
|
+
"read": "2026-10-19"
|
|
35114
|
+
},
|
|
35115
|
+
{
|
|
35116
|
+
"id": "DEP0135",
|
|
35117
|
+
"ecosystem": "node",
|
|
35118
|
+
"pkg": "node",
|
|
35119
|
+
"pattern": "\\bWriteStream\\.open\\s*\\(",
|
|
35120
|
+
"deprecatedIn": "13.0.0",
|
|
35121
|
+
"deprecatedOn": "2019-10-22",
|
|
35122
|
+
"removedIn": "25.0.0",
|
|
35123
|
+
"removedOn": "2025-10-15",
|
|
35124
|
+
"replacement": "what Node's page for DEP0135 names",
|
|
35125
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0135",
|
|
35126
|
+
"read": "2026-10-19"
|
|
35127
|
+
},
|
|
35128
|
+
{
|
|
35129
|
+
"id": "DEP0138",
|
|
35130
|
+
"ecosystem": "node",
|
|
35131
|
+
"pkg": "node",
|
|
35132
|
+
"pattern": "(?:\\bprocess\\.|(?<![\\w$.]))mainModule\\b",
|
|
35133
|
+
"deprecatedIn": "14.0.0",
|
|
35134
|
+
"deprecatedOn": "2020-04-21",
|
|
35135
|
+
"removedIn": null,
|
|
35136
|
+
"removedOn": null,
|
|
35137
|
+
"replacement": "what Node's page for DEP0138 names",
|
|
35138
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0138",
|
|
35139
|
+
"read": "2026-10-19"
|
|
35140
|
+
},
|
|
35141
|
+
{
|
|
35142
|
+
"id": "DEP0139",
|
|
35143
|
+
"ecosystem": "node",
|
|
35144
|
+
"pkg": "node",
|
|
35145
|
+
"pattern": "\\bprocess\\.umask\\s*\\(",
|
|
35146
|
+
"deprecatedIn": "14.0.0",
|
|
35147
|
+
"deprecatedOn": "2020-04-21",
|
|
35148
|
+
"removedIn": null,
|
|
35149
|
+
"removedOn": null,
|
|
35150
|
+
"replacement": "what Node's page for DEP0139 names",
|
|
35151
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0139",
|
|
35152
|
+
"read": "2026-10-19"
|
|
35153
|
+
},
|
|
35154
|
+
{
|
|
35155
|
+
"id": "DEP0141",
|
|
35156
|
+
"ecosystem": "node",
|
|
35157
|
+
"pkg": "node",
|
|
35158
|
+
"pattern": "(?:\\brepl\\.|(?<![\\w$.]))inputStream\\b|(?:\\brepl\\.|(?<![\\w$.]))outputStream\\b",
|
|
35159
|
+
"deprecatedIn": "14.3.0",
|
|
35160
|
+
"deprecatedOn": "2020-05-19",
|
|
35161
|
+
"removedIn": null,
|
|
35162
|
+
"removedOn": null,
|
|
35163
|
+
"replacement": ".input",
|
|
35164
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0141",
|
|
35165
|
+
"read": "2026-10-19"
|
|
35166
|
+
},
|
|
35167
|
+
{
|
|
35168
|
+
"id": "DEP0142",
|
|
35169
|
+
"ecosystem": "node",
|
|
35170
|
+
"pkg": "node",
|
|
35171
|
+
"pattern": "(?:\\brepl\\.|(?<![\\w$.]))_builtinLibs\\b",
|
|
35172
|
+
"deprecatedIn": "14.3.0",
|
|
35173
|
+
"deprecatedOn": "2020-05-19",
|
|
35174
|
+
"removedIn": null,
|
|
35175
|
+
"removedOn": null,
|
|
35176
|
+
"replacement": "what Node's page for DEP0142 names",
|
|
35177
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0142",
|
|
35178
|
+
"read": "2026-10-19"
|
|
35179
|
+
},
|
|
35180
|
+
{
|
|
35181
|
+
"id": "DEP0143",
|
|
35182
|
+
"ecosystem": "node",
|
|
35183
|
+
"pkg": "node",
|
|
35184
|
+
"pattern": "\\bTransform\\._transformState\\b",
|
|
35185
|
+
"deprecatedIn": "14.5.0",
|
|
35186
|
+
"deprecatedOn": "2020-06-30",
|
|
35187
|
+
"removedIn": "15.0.0",
|
|
35188
|
+
"removedOn": "2020-10-20",
|
|
35189
|
+
"replacement": "what Node's page for DEP0143 names",
|
|
35190
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0143",
|
|
35191
|
+
"read": "2026-10-19"
|
|
35192
|
+
},
|
|
35193
|
+
{
|
|
35194
|
+
"id": "DEP0144",
|
|
35195
|
+
"ecosystem": "node",
|
|
35196
|
+
"pkg": "node",
|
|
35197
|
+
"pattern": "\\bmodule\\.parent\\b",
|
|
35198
|
+
"deprecatedIn": "14.6.0",
|
|
35199
|
+
"deprecatedOn": "2020-07-20",
|
|
35200
|
+
"removedIn": null,
|
|
35201
|
+
"removedOn": null,
|
|
35202
|
+
"replacement": "what Node's page for DEP0144 names",
|
|
35203
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0144",
|
|
35204
|
+
"read": "2026-10-19"
|
|
35205
|
+
},
|
|
35206
|
+
{
|
|
35207
|
+
"id": "DEP0145",
|
|
35208
|
+
"ecosystem": "node",
|
|
35209
|
+
"pkg": "node",
|
|
35210
|
+
"pattern": "\\bsocket\\.bufferSize\\b",
|
|
35211
|
+
"deprecatedIn": "14.6.0",
|
|
35212
|
+
"deprecatedOn": "2020-07-20",
|
|
35213
|
+
"removedIn": null,
|
|
35214
|
+
"removedOn": null,
|
|
35215
|
+
"replacement": "what Node's page for DEP0145 names",
|
|
35216
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0145",
|
|
35217
|
+
"read": "2026-10-19"
|
|
35218
|
+
},
|
|
35219
|
+
{
|
|
35220
|
+
"id": "DEP0146",
|
|
35221
|
+
"ecosystem": "node",
|
|
35222
|
+
"pkg": "node",
|
|
35223
|
+
"pattern": "\\bnew\\s+crypto\\.Certificate\\s*\\(",
|
|
35224
|
+
"deprecatedIn": "14.9.0",
|
|
35225
|
+
"deprecatedOn": "2020-08-27",
|
|
35226
|
+
"removedIn": null,
|
|
35227
|
+
"removedOn": null,
|
|
35228
|
+
"replacement": "what Node's page for DEP0146 names",
|
|
35229
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0146",
|
|
35230
|
+
"read": "2026-10-19"
|
|
35231
|
+
},
|
|
35232
|
+
{
|
|
35233
|
+
"id": "DEP0161",
|
|
35234
|
+
"ecosystem": "node",
|
|
35235
|
+
"pkg": "node",
|
|
35236
|
+
"pattern": "\\bprocess\\._getActiveRequests\\s*\\(",
|
|
35237
|
+
"deprecatedIn": "17.6.0",
|
|
35238
|
+
"deprecatedOn": "2022-02-22",
|
|
35239
|
+
"removedIn": null,
|
|
35240
|
+
"removedOn": null,
|
|
35241
|
+
"replacement": "process.getActiveResourcesInfo()",
|
|
35242
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0161",
|
|
35243
|
+
"read": "2026-10-19"
|
|
35244
|
+
},
|
|
35245
|
+
{
|
|
35246
|
+
"id": "DEP0162",
|
|
35247
|
+
"ecosystem": "node",
|
|
35248
|
+
"pkg": "node",
|
|
35249
|
+
"pattern": "\\bfs\\.write\\s*\\(",
|
|
35250
|
+
"deprecatedIn": "18.0.0",
|
|
35251
|
+
"deprecatedOn": "2022-04-18",
|
|
35252
|
+
"removedIn": "19.0.0",
|
|
35253
|
+
"removedOn": "2022-10-17",
|
|
35254
|
+
"replacement": "what Node's page for DEP0162 names",
|
|
35255
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0162",
|
|
35256
|
+
"read": "2026-10-19"
|
|
35257
|
+
},
|
|
35258
|
+
{
|
|
35259
|
+
"id": "DEP0173",
|
|
35260
|
+
"ecosystem": "node",
|
|
35261
|
+
"pkg": "node",
|
|
35262
|
+
"pattern": "(?:\\bassert\\.|(?<![\\w$.]))CallTracker\\b",
|
|
35263
|
+
"deprecatedIn": "20.1.0",
|
|
35264
|
+
"deprecatedOn": "2023-05-03",
|
|
35265
|
+
"removedIn": "25.0.0",
|
|
35266
|
+
"removedOn": "2025-10-15",
|
|
35267
|
+
"replacement": "what Node's page for DEP0173 names",
|
|
35268
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0173",
|
|
35269
|
+
"read": "2026-10-19"
|
|
35270
|
+
},
|
|
35271
|
+
{
|
|
35272
|
+
"id": "DEP0175",
|
|
35273
|
+
"ecosystem": "node",
|
|
35274
|
+
"pkg": "node",
|
|
35275
|
+
"pattern": "(?:\\butil\\.|(?<![\\w$.]))toUSVString\\b",
|
|
35276
|
+
"deprecatedIn": "20.8.0",
|
|
35277
|
+
"deprecatedOn": "2023-09-28",
|
|
35278
|
+
"removedIn": null,
|
|
35279
|
+
"removedOn": null,
|
|
35280
|
+
"replacement": "String.prototype.toWellFormed",
|
|
35281
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0175",
|
|
35282
|
+
"read": "2026-10-19"
|
|
35283
|
+
},
|
|
35284
|
+
{
|
|
35285
|
+
"id": "DEP0176",
|
|
35286
|
+
"ecosystem": "node",
|
|
35287
|
+
"pkg": "node",
|
|
35288
|
+
"pattern": "(?:\\bfs\\.|(?<![\\w$.]))F_OK\\b|(?:\\bfs\\.|(?<![\\w$.]))R_OK\\b|(?:\\bfs\\.|(?<![\\w$.]))W_OK\\b|(?:\\bfs\\.|(?<![\\w$.]))X_OK\\b",
|
|
35289
|
+
"deprecatedIn": "24.0.0",
|
|
35290
|
+
"deprecatedOn": "2025-05-06",
|
|
35291
|
+
"removedIn": "25.0.0",
|
|
35292
|
+
"removedOn": "2025-10-15",
|
|
35293
|
+
"replacement": "what Node's page for DEP0176 names",
|
|
35294
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0176",
|
|
35295
|
+
"read": "2026-10-19"
|
|
35296
|
+
},
|
|
35297
|
+
{
|
|
35298
|
+
"id": "DEP0177",
|
|
35299
|
+
"ecosystem": "node",
|
|
35300
|
+
"pkg": "node",
|
|
35301
|
+
"pattern": "\\butil\\.types\\.isWebAssemblyCompiledModule\\b",
|
|
35302
|
+
"deprecatedIn": "14.0.0",
|
|
35303
|
+
"deprecatedOn": "2020-04-21",
|
|
35304
|
+
"removedIn": "21.7.0",
|
|
35305
|
+
"removedOn": "2024-03-06",
|
|
35306
|
+
"replacement": "value instanceof WebAssembly.Module",
|
|
35307
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0177",
|
|
35308
|
+
"read": "2026-10-19"
|
|
35309
|
+
},
|
|
35310
|
+
{
|
|
35311
|
+
"id": "DEP0178",
|
|
35312
|
+
"ecosystem": "node",
|
|
35313
|
+
"pkg": "node",
|
|
35314
|
+
"pattern": "\\bdirent\\.path\\b",
|
|
35315
|
+
"deprecatedIn": "23.0.0",
|
|
35316
|
+
"deprecatedOn": "2024-10-16",
|
|
35317
|
+
"removedIn": "24.0.0",
|
|
35318
|
+
"removedOn": "2025-05-06",
|
|
35319
|
+
"replacement": "dirent.parentPath",
|
|
35320
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0178",
|
|
35321
|
+
"read": "2026-10-19"
|
|
35322
|
+
},
|
|
35323
|
+
{
|
|
35324
|
+
"id": "DEP0179",
|
|
35325
|
+
"ecosystem": "node",
|
|
35326
|
+
"pkg": "node",
|
|
35327
|
+
"pattern": "\\b(?:new\\s+)?Hash\\s*\\(",
|
|
35328
|
+
"deprecatedIn": "22.0.0",
|
|
35329
|
+
"deprecatedOn": "2024-04-24",
|
|
35330
|
+
"removedIn": null,
|
|
35331
|
+
"removedOn": null,
|
|
35332
|
+
"replacement": "what Node's page for DEP0179 names",
|
|
35333
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0179",
|
|
35334
|
+
"read": "2026-10-19"
|
|
35335
|
+
},
|
|
35336
|
+
{
|
|
35337
|
+
"id": "DEP0180",
|
|
35338
|
+
"ecosystem": "node",
|
|
35339
|
+
"pkg": "node",
|
|
35340
|
+
"pattern": "\\b(?:new\\s+)?fs\\.Stats\\s*\\(",
|
|
35341
|
+
"deprecatedIn": "22.0.0",
|
|
35342
|
+
"deprecatedOn": "2024-04-24",
|
|
35343
|
+
"removedIn": null,
|
|
35344
|
+
"removedOn": null,
|
|
35345
|
+
"replacement": "what Node's page for DEP0180 names",
|
|
35346
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0180",
|
|
35347
|
+
"read": "2026-10-19"
|
|
35348
|
+
},
|
|
35349
|
+
{
|
|
35350
|
+
"id": "DEP0181",
|
|
35351
|
+
"ecosystem": "node",
|
|
35352
|
+
"pkg": "node",
|
|
35353
|
+
"pattern": "\\b(?:new\\s+)?Hmac\\s*\\(",
|
|
35354
|
+
"deprecatedIn": "22.0.0",
|
|
35355
|
+
"deprecatedOn": "2024-04-24",
|
|
35356
|
+
"removedIn": null,
|
|
35357
|
+
"removedOn": null,
|
|
35358
|
+
"replacement": "what Node's page for DEP0181 names",
|
|
35359
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0181",
|
|
35360
|
+
"read": "2026-10-19"
|
|
35361
|
+
},
|
|
35362
|
+
{
|
|
35363
|
+
"id": "DEP0184",
|
|
35364
|
+
"ecosystem": "node",
|
|
35365
|
+
"pkg": "node",
|
|
35366
|
+
"pattern": "(?<!new\\s+)\\bzlib\\.[A-Z][A-Za-z0-9]*\\s*\\(",
|
|
35367
|
+
"deprecatedIn": "24.0.0",
|
|
35368
|
+
"deprecatedOn": "2025-05-06",
|
|
35369
|
+
"removedIn": null,
|
|
35370
|
+
"removedOn": null,
|
|
35371
|
+
"replacement": "what Node's page for DEP0184 names",
|
|
35372
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0184",
|
|
35373
|
+
"read": "2026-10-19"
|
|
35374
|
+
},
|
|
35375
|
+
{
|
|
35376
|
+
"id": "DEP0185",
|
|
35377
|
+
"ecosystem": "node",
|
|
35378
|
+
"pkg": "node",
|
|
35379
|
+
"pattern": "(?<!new\\s+)\\brepl\\.[A-Z][A-Za-z0-9]*\\s*\\(",
|
|
35380
|
+
"deprecatedIn": "24.0.0",
|
|
35381
|
+
"deprecatedOn": "2025-05-06",
|
|
35382
|
+
"removedIn": "25.0.0",
|
|
35383
|
+
"removedOn": "2025-10-15",
|
|
35384
|
+
"replacement": "what Node's page for DEP0185 names",
|
|
35385
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0185",
|
|
35386
|
+
"read": "2026-10-19"
|
|
35387
|
+
},
|
|
35388
|
+
{
|
|
35389
|
+
"id": "DEP0188",
|
|
35390
|
+
"ecosystem": "node",
|
|
35391
|
+
"pkg": "node",
|
|
35392
|
+
"pattern": "\\bprocess\\.features\\.ipv6\\b|\\bprocess\\.features\\.uv\\b",
|
|
35393
|
+
"deprecatedIn": "23.4.0",
|
|
35394
|
+
"deprecatedOn": "2024-12-10",
|
|
35395
|
+
"removedIn": null,
|
|
35396
|
+
"removedOn": null,
|
|
35397
|
+
"replacement": "what Node's page for DEP0188 names",
|
|
35398
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0188",
|
|
35399
|
+
"read": "2026-10-19"
|
|
35400
|
+
},
|
|
35401
|
+
{
|
|
35402
|
+
"id": "DEP0189",
|
|
35403
|
+
"ecosystem": "node",
|
|
35404
|
+
"pkg": "node",
|
|
35405
|
+
"pattern": "\\bprocess\\.features\\.tls_\\w+",
|
|
35406
|
+
"deprecatedIn": "23.4.0",
|
|
35407
|
+
"deprecatedOn": "2024-12-10",
|
|
35408
|
+
"removedIn": null,
|
|
35409
|
+
"removedOn": null,
|
|
35410
|
+
"replacement": "what Node's page for DEP0189 names",
|
|
35411
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0189",
|
|
35412
|
+
"read": "2026-10-19"
|
|
35413
|
+
},
|
|
35414
|
+
{
|
|
35415
|
+
"id": "DEP0191",
|
|
35416
|
+
"ecosystem": "node",
|
|
35417
|
+
"pkg": "node",
|
|
35418
|
+
"pattern": "(?:\\brepl\\.|(?<![\\w$.]))builtinModules\\b",
|
|
35419
|
+
"deprecatedIn": "24.0.0",
|
|
35420
|
+
"deprecatedOn": "2025-05-06",
|
|
35421
|
+
"removedIn": null,
|
|
35422
|
+
"removedOn": null,
|
|
35423
|
+
"replacement": "what Node's page for DEP0191 names",
|
|
35424
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0191",
|
|
35425
|
+
"read": "2026-10-19"
|
|
35426
|
+
},
|
|
35427
|
+
{
|
|
35428
|
+
"id": "DEP0192",
|
|
35429
|
+
"ecosystem": "node",
|
|
35430
|
+
"pkg": "node",
|
|
35431
|
+
"pattern": "(?:require\\s*\\(|import\\s*\\(|from)\\s*['\"](?:node:)?_tls_common['\"]|(?:require\\s*\\(|import\\s*\\(|from)\\s*['\"](?:node:)?_tls_wrap['\"]",
|
|
35432
|
+
"deprecatedIn": "24.2.0",
|
|
35433
|
+
"deprecatedOn": "2025-06-09",
|
|
35434
|
+
"removedIn": null,
|
|
35435
|
+
"removedOn": null,
|
|
35436
|
+
"replacement": "node:tls",
|
|
35437
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0192",
|
|
35438
|
+
"read": "2026-10-19"
|
|
35439
|
+
},
|
|
35440
|
+
{
|
|
35441
|
+
"id": "DEP0193",
|
|
35442
|
+
"ecosystem": "node",
|
|
35443
|
+
"pkg": "node",
|
|
35444
|
+
"pattern": "(?:require\\s*\\(|import\\s*\\(|from)\\s*['\"](?:node:)?_stream_\\w+['\"]",
|
|
35445
|
+
"deprecatedIn": "24.2.0",
|
|
35446
|
+
"deprecatedOn": "2025-06-09",
|
|
35447
|
+
"removedIn": "26.0.0",
|
|
35448
|
+
"removedOn": "2026-05-05",
|
|
35449
|
+
"replacement": "node:stream",
|
|
35450
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0193",
|
|
35451
|
+
"read": "2026-10-19"
|
|
35452
|
+
},
|
|
35453
|
+
{
|
|
35454
|
+
"id": "DEP0195",
|
|
35455
|
+
"ecosystem": "node",
|
|
35456
|
+
"pkg": "node",
|
|
35457
|
+
"pattern": "(?<!new\\s+)\\bhttp\\.[A-Z][A-Za-z0-9]*\\s*\\(",
|
|
35458
|
+
"deprecatedIn": "24.2.0",
|
|
35459
|
+
"deprecatedOn": "2025-06-09",
|
|
35460
|
+
"removedIn": null,
|
|
35461
|
+
"removedOn": null,
|
|
35462
|
+
"replacement": "what Node's page for DEP0195 names",
|
|
35463
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0195",
|
|
35464
|
+
"read": "2026-10-19"
|
|
35465
|
+
},
|
|
35466
|
+
{
|
|
35467
|
+
"id": "DEP0196",
|
|
35468
|
+
"ecosystem": "node",
|
|
35469
|
+
"pkg": "node",
|
|
35470
|
+
"pattern": "\\bshell\\s*:\\s*(['\"`])\\1",
|
|
35471
|
+
"deprecatedIn": "24.2.0",
|
|
35472
|
+
"deprecatedOn": "2025-06-09",
|
|
35473
|
+
"removedIn": null,
|
|
35474
|
+
"removedOn": null,
|
|
35475
|
+
"replacement": "{ shell: true }",
|
|
35476
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0196",
|
|
35477
|
+
"read": "2026-10-19"
|
|
35478
|
+
},
|
|
35479
|
+
{
|
|
35480
|
+
"id": "DEP0197",
|
|
35481
|
+
"ecosystem": "node",
|
|
35482
|
+
"pkg": "node",
|
|
35483
|
+
"pattern": "\\butil\\.types\\.isNativeError\\s*\\(",
|
|
35484
|
+
"deprecatedIn": "24.2.0",
|
|
35485
|
+
"deprecatedOn": "2025-06-09",
|
|
35486
|
+
"removedIn": null,
|
|
35487
|
+
"removedOn": null,
|
|
35488
|
+
"replacement": "Error.isError",
|
|
35489
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0197",
|
|
35490
|
+
"read": "2026-10-19"
|
|
35491
|
+
},
|
|
35492
|
+
{
|
|
35493
|
+
"id": "DEP0199",
|
|
35494
|
+
"ecosystem": "node",
|
|
35495
|
+
"pkg": "node",
|
|
35496
|
+
"pattern": "(?:require\\s*\\(|import\\s*\\(|from)\\s*['\"](?:node:)?_http_\\w+['\"]",
|
|
35497
|
+
"deprecatedIn": "24.6.0",
|
|
35498
|
+
"deprecatedOn": "2025-08-14",
|
|
35499
|
+
"removedIn": null,
|
|
35500
|
+
"removedOn": null,
|
|
35501
|
+
"replacement": "node:http",
|
|
35502
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0199",
|
|
35503
|
+
"read": "2026-10-19"
|
|
35504
|
+
},
|
|
35505
|
+
{
|
|
35506
|
+
"id": "DEP0201",
|
|
35507
|
+
"ecosystem": "node",
|
|
35508
|
+
"pkg": "node",
|
|
35509
|
+
"pattern": "\\bDuplex\\.toWeb\\s*\\([^;]*\\btype\\s*:",
|
|
35510
|
+
"deprecatedIn": "26.0.0",
|
|
35511
|
+
"deprecatedOn": "2026-05-05",
|
|
35512
|
+
"removedIn": null,
|
|
35513
|
+
"removedOn": null,
|
|
35514
|
+
"replacement": "what Node's page for DEP0201 names",
|
|
35515
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0201",
|
|
35516
|
+
"read": "2026-10-19"
|
|
35517
|
+
},
|
|
35518
|
+
{
|
|
35519
|
+
"id": "DEP0202",
|
|
35520
|
+
"ecosystem": "node",
|
|
35521
|
+
"pkg": "node",
|
|
35522
|
+
"pattern": "\\bHttp1IncomingMessage\\b|\\bHttp1ServerResponse\\b",
|
|
35523
|
+
"deprecatedIn": "25.7.0",
|
|
35524
|
+
"deprecatedOn": "2026-02-24",
|
|
35525
|
+
"removedIn": null,
|
|
35526
|
+
"removedOn": null,
|
|
35527
|
+
"replacement": "http1Options.IncomingMessage",
|
|
35528
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0202",
|
|
35529
|
+
"read": "2026-10-19"
|
|
35530
|
+
},
|
|
35531
|
+
{
|
|
35532
|
+
"id": "DEP0204",
|
|
35533
|
+
"ecosystem": "node",
|
|
35534
|
+
"pkg": "node",
|
|
35535
|
+
"pattern": "\\bKeyObject\\.from\\s*\\(",
|
|
35536
|
+
"deprecatedIn": "26.0.0",
|
|
35537
|
+
"deprecatedOn": "2026-05-05",
|
|
35538
|
+
"removedIn": null,
|
|
35539
|
+
"removedOn": null,
|
|
35540
|
+
"replacement": "what Node's page for DEP0204 names",
|
|
35541
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0204",
|
|
35542
|
+
"read": "2026-10-19"
|
|
35543
|
+
},
|
|
35544
|
+
{
|
|
35545
|
+
"id": "DEP0205",
|
|
35546
|
+
"ecosystem": "node",
|
|
35547
|
+
"pkg": "node",
|
|
35548
|
+
"pattern": "\\bmodule\\.register\\s*\\(",
|
|
35549
|
+
"deprecatedIn": "26.0.0",
|
|
35550
|
+
"deprecatedOn": "2026-05-05",
|
|
35551
|
+
"removedIn": null,
|
|
35552
|
+
"removedOn": null,
|
|
35553
|
+
"replacement": "module.registerHooks()",
|
|
35554
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0205",
|
|
35555
|
+
"read": "2026-10-19"
|
|
35556
|
+
},
|
|
35557
|
+
{
|
|
35558
|
+
"id": "DEP0208",
|
|
35559
|
+
"ecosystem": "node",
|
|
35560
|
+
"pkg": "node",
|
|
35561
|
+
"pattern": "\\._listen2\\b",
|
|
35562
|
+
"deprecatedIn": "26.8.2",
|
|
35563
|
+
"deprecatedOn": "2026-09-09",
|
|
35564
|
+
"removedIn": null,
|
|
35565
|
+
"removedOn": null,
|
|
35566
|
+
"replacement": "server.listen()",
|
|
35567
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0208",
|
|
35568
|
+
"read": "2026-10-19"
|
|
35569
|
+
},
|
|
35570
|
+
{
|
|
35571
|
+
"id": "DEP0210",
|
|
35572
|
+
"ecosystem": "node",
|
|
35573
|
+
"pkg": "node",
|
|
35574
|
+
"pattern": "(?:\\bsqlite\\.|(?<![\\w$.]))DatabaseSync\\b",
|
|
35575
|
+
"deprecatedIn": "26.11.0",
|
|
35576
|
+
"deprecatedOn": "2026-10-07",
|
|
35577
|
+
"removedIn": null,
|
|
35578
|
+
"removedOn": null,
|
|
35579
|
+
"replacement": "Database",
|
|
35580
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0210",
|
|
35581
|
+
"read": "2026-10-19"
|
|
35582
|
+
},
|
|
35583
|
+
{
|
|
35584
|
+
"id": "DEP0211",
|
|
35585
|
+
"ecosystem": "node",
|
|
35586
|
+
"pkg": "node",
|
|
35587
|
+
"pattern": "(?:\\bsqlite\\.|(?<![\\w$.]))StatementSync\\b",
|
|
35588
|
+
"deprecatedIn": "26.11.0",
|
|
35589
|
+
"deprecatedOn": "2026-10-07",
|
|
35590
|
+
"removedIn": null,
|
|
35591
|
+
"removedOn": null,
|
|
35592
|
+
"replacement": "Statement",
|
|
35593
|
+
"source": "https://nodejs.org/api/deprecations.html#dep0211",
|
|
35594
|
+
"read": "2026-10-19"
|
|
35595
|
+
}
|
|
35596
|
+
];
|
|
35597
|
+
|
|
33902
35598
|
//#endregion
|
|
33903
35599
|
//#region ../review/src/deprecations.ts
|
|
33904
35600
|
const JS$2 = /\.(m|c)?(j|t)sx?$/;
|
|
@@ -34071,8 +35767,47 @@ function declaredVersions(contents) {
|
|
|
34071
35767
|
}
|
|
34072
35768
|
return out;
|
|
34073
35769
|
}
|
|
35770
|
+
/** The catalogue a review matches: the hand-written floor above, then every Node deprecation its publisher lists that the floor does not. */
|
|
35771
|
+
const CATALOGUE = withGenerated(DEPRECATIONS, entries);
|
|
35772
|
+
let live = null;
|
|
35773
|
+
let restUntil = 0;
|
|
35774
|
+
/** The catalogue a review matches now: the publisher's list as last read here, else the kept file. */
|
|
35775
|
+
const currentCatalogue = () => live?.catalogue ?? CATALOGUE;
|
|
35776
|
+
async function refreshDeprecations(o = {}) {
|
|
35777
|
+
const now = o.now ?? Date.now();
|
|
35778
|
+
if (live && now - live.at < 864e5) return {
|
|
35779
|
+
read: live.read,
|
|
35780
|
+
entries: live.catalogue.length
|
|
35781
|
+
};
|
|
35782
|
+
if (now < restUntil) return { kept: "Node's pages did not answer within the hour - the kept list stands" };
|
|
35783
|
+
const get = o.get ?? (async (url) => {
|
|
35784
|
+
const r = await fetch(url, { signal: AbortSignal.timeout(5e3) });
|
|
35785
|
+
if (!r.ok) throw new Error(`${url} answered ${r.status}`);
|
|
35786
|
+
return r.json();
|
|
35787
|
+
});
|
|
35788
|
+
try {
|
|
35789
|
+
const read = new Date(now).toISOString().slice(0, 10);
|
|
35790
|
+
const entries$1 = fromNodeDocs(await get(NODE_DEPRECATIONS_URL), await get(NODE_RELEASES_URL), read);
|
|
35791
|
+
if (entries$1.length < 20) {
|
|
35792
|
+
restUntil = now + 36e5;
|
|
35793
|
+
return { kept: `Node's pages gave ${entries$1.length} usable entries - the kept list stands` };
|
|
35794
|
+
}
|
|
35795
|
+
live = {
|
|
35796
|
+
at: now,
|
|
35797
|
+
read,
|
|
35798
|
+
catalogue: withGenerated(DEPRECATIONS, entries$1)
|
|
35799
|
+
};
|
|
35800
|
+
return {
|
|
35801
|
+
read,
|
|
35802
|
+
entries: entries$1.length
|
|
35803
|
+
};
|
|
35804
|
+
} catch (e$1) {
|
|
35805
|
+
restUntil = now + 36e5;
|
|
35806
|
+
return { kept: `Node's pages did not answer (${String(e$1?.message ?? e$1).slice(0, 120)}) - the kept list stands` };
|
|
35807
|
+
}
|
|
35808
|
+
}
|
|
34074
35809
|
/** Each added use of a deprecated or removed API, against the version the repository declares, with its dated source. */
|
|
34075
|
-
function deprecationFindings(files, contents = {}, catalogue =
|
|
35810
|
+
function deprecationFindings(files, contents = {}, catalogue = currentCatalogue()) {
|
|
34076
35811
|
const versions = declaredVersions(contents);
|
|
34077
35812
|
const out = [];
|
|
34078
35813
|
for (const f of files) for (const { line, text } of addedLines(f)) for (const d of catalogue) {
|
|
@@ -37771,6 +39506,9 @@ const SCHEME_FACTS = {
|
|
|
37771
39506
|
const UNHELD_REVIEWS_A_DAY = 20;
|
|
37772
39507
|
/** What a pull request past that bound is told, once, when it opens. */
|
|
37773
39508
|
const UNHELD_LINE = `Xovris has already reviewed ${UNHELD_REVIEWS_A_DAY} pull requests today for this installation, which no Xovris workspace holds yet, so this one is not reviewed. Connect the repository in Xovris under Connections, GitHub (free to start) and every pull request is reviewed, with each fix proven before it is offered - or say \`@xovris review\` here tomorrow.`;
|
|
39509
|
+
/** KEEP (the provider's own limits, each with its reason): GitHub serves a file's contents up to 100 MB (raw media type); a code search
|
|
39510
|
+
* page holds at most 100 results; and its secondary rate limit refuses bursts, so files are asked for eight at a time. */
|
|
39511
|
+
const GITHUB_RAW_MAX_BYTES = 100 * 1024 * 1024;
|
|
37774
39512
|
|
|
37775
39513
|
//#endregion
|
|
37776
39514
|
//#region ../review/src/hosts.ts
|
|
@@ -39759,11 +41497,11 @@ const SEED_GRAMMARS = [
|
|
|
39759
41497
|
/** Splits a file holding git conflict markers (with or without the diff3 base) into its plain lines and its hunks. */
|
|
39760
41498
|
function parseConflicts(text) {
|
|
39761
41499
|
const lines = text.split("\n");
|
|
39762
|
-
const parts$
|
|
41500
|
+
const parts$2 = [];
|
|
39763
41501
|
const hunks = [];
|
|
39764
41502
|
for (let i = 0; i < lines.length; i += 1) {
|
|
39765
41503
|
if (!lines[i].startsWith("<<<<<<< ")) {
|
|
39766
|
-
parts$
|
|
41504
|
+
parts$2.push(lines[i]);
|
|
39767
41505
|
continue;
|
|
39768
41506
|
}
|
|
39769
41507
|
const h = {
|
|
@@ -39788,12 +41526,12 @@ function parseConflicts(text) {
|
|
|
39788
41526
|
if (l.startsWith(">>>>>>> ") || l === ">>>>>>>") break;
|
|
39789
41527
|
(side === "ours" ? h.ours : side === "base" ? h.base : h.theirs).push(l);
|
|
39790
41528
|
}
|
|
39791
|
-
parts$
|
|
41529
|
+
parts$2.push(h);
|
|
39792
41530
|
hunks.push(h);
|
|
39793
41531
|
i = j;
|
|
39794
41532
|
}
|
|
39795
41533
|
return {
|
|
39796
|
-
parts: parts$
|
|
41534
|
+
parts: parts$2,
|
|
39797
41535
|
hunks
|
|
39798
41536
|
};
|
|
39799
41537
|
}
|
|
@@ -39860,11 +41598,11 @@ function resolveHunk(h) {
|
|
|
39860
41598
|
}
|
|
39861
41599
|
/** Every hunk of a file; the file is resolved only when every hunk is, never half. */
|
|
39862
41600
|
function resolveConflicts(text) {
|
|
39863
|
-
const { parts: parts$
|
|
41601
|
+
const { parts: parts$2, hunks } = parseConflicts(text);
|
|
39864
41602
|
const resolved = [];
|
|
39865
41603
|
const unresolved = [];
|
|
39866
41604
|
const out = [];
|
|
39867
|
-
for (const p$1 of parts$
|
|
41605
|
+
for (const p$1 of parts$2) {
|
|
39868
41606
|
if (typeof p$1 === "string") {
|
|
39869
41607
|
out.push(p$1);
|
|
39870
41608
|
continue;
|
|
@@ -40313,7 +42051,7 @@ function checkFacetQuery(raw) {
|
|
|
40313
42051
|
const run$1 = promisify(execFile);
|
|
40314
42052
|
const tail = (s) => s.trim().split("\n").slice(-12).join("\n").slice(-1500);
|
|
40315
42053
|
const names = (xs) => xs.map((x) => x.id).join(", ");
|
|
40316
|
-
async function runMergeQueue(entries, o) {
|
|
42054
|
+
async function runMergeQueue(entries$1, o) {
|
|
40317
42055
|
const from = await o.repo.tip(o.start ?? o.base);
|
|
40318
42056
|
const out = {
|
|
40319
42057
|
base: o.base,
|
|
@@ -40325,13 +42063,13 @@ async function runMergeQueue(entries, o) {
|
|
|
40325
42063
|
said: ""
|
|
40326
42064
|
};
|
|
40327
42065
|
if (!from) {
|
|
40328
|
-
out.untried = entries.map((e$1) => e$1.id);
|
|
42066
|
+
out.untried = entries$1.map((e$1) => e$1.id);
|
|
40329
42067
|
out.said = `The base branch ${o.base} was not found, so nothing was merged.`;
|
|
40330
42068
|
return out;
|
|
40331
42069
|
}
|
|
40332
42070
|
let cur = from;
|
|
40333
|
-
for (let i = 0; i < entries.length; i += 1) {
|
|
40334
|
-
const e$1 = entries[i];
|
|
42071
|
+
for (let i = 0; i < entries$1.length; i += 1) {
|
|
42072
|
+
const e$1 = entries$1[i];
|
|
40335
42073
|
if (e$1.missing) {
|
|
40336
42074
|
out.removed.push({
|
|
40337
42075
|
id: e$1.id,
|
|
@@ -40375,7 +42113,7 @@ async function runMergeQueue(entries, o) {
|
|
|
40375
42113
|
}
|
|
40376
42114
|
const moved = await o.repo.advance(o.base, cur, t.sha);
|
|
40377
42115
|
if (!moved.ok) {
|
|
40378
|
-
out.untried = entries.slice(i).map((x) => x.id);
|
|
42116
|
+
out.untried = entries$1.slice(i).map((x) => x.id);
|
|
40379
42117
|
out.said = `The queue stopped: ${moved.why}. ${out.merged.length} merged before it; the rest were not tried, and run again from the base as it now stands.`;
|
|
40380
42118
|
out.to = cur;
|
|
40381
42119
|
return out;
|
|
@@ -40388,13 +42126,13 @@ async function runMergeQueue(entries, o) {
|
|
|
40388
42126
|
});
|
|
40389
42127
|
}
|
|
40390
42128
|
out.to = cur;
|
|
40391
|
-
out.said = `${out.merged.length} of ${entries.length} merged into ${o.base}, its tests green on each merge before ${o.base} moved to it${out.removed.length ? `; ${out.removed.length} taken out: ${out.removed.map((r) => `${r.id} - ${r.why}`).join("; ")}` : ""}.`;
|
|
42129
|
+
out.said = `${out.merged.length} of ${entries$1.length} merged into ${o.base}, its tests green on each merge before ${o.base} moved to it${out.removed.length ? `; ${out.removed.length} taken out: ${out.removed.map((r) => `${r.id} - ${r.why}`).join("; ")}` : ""}.`;
|
|
40392
42130
|
return out;
|
|
40393
42131
|
}
|
|
40394
42132
|
/** The order a queue takes: pull requests in the order asked, then Xovris's own proven fix stack in its own order (bottom first). */
|
|
40395
|
-
function queueOrder(entries) {
|
|
40396
|
-
const fixes = entries.filter((e$1) => /(^|\/)xovris\/fix-/.test(e$1.ref));
|
|
40397
|
-
return [...entries.filter((e$1) => !fixes.includes(e$1)), ...fixes];
|
|
42133
|
+
function queueOrder(entries$1) {
|
|
42134
|
+
const fixes = entries$1.filter((e$1) => /(^|\/)xovris\/fix-/.test(e$1.ref));
|
|
42135
|
+
return [...entries$1.filter((e$1) => !fixes.includes(e$1)), ...fixes];
|
|
40398
42136
|
}
|
|
40399
42137
|
/**
|
|
40400
42138
|
* The queue on a real git repository: each trial in a scratch working tree inside the repository's own .git (so the packages it
|
|
@@ -42899,4 +44637,4 @@ async function huntRepository(root, o = {}) {
|
|
|
42899
44637
|
}
|
|
42900
44638
|
|
|
42901
44639
|
//#endregion
|
|
42902
|
-
export { contentDigest as A, readsForShape as B, hostRest as C, filesOf as D, undoFixes as E, leaveBy as F,
|
|
44640
|
+
export { contentDigest as A, readsForShape as B, hostRest as C, filesOf as D, undoFixes as E, leaveBy as F, workOut as G, refreshDeprecations as H, forAgents as I, readingsOf as J, assumptionsOf as K, readsForReview as L, applyGuarded as M, jobRunner as N, guardStrip as O, handOff as P, SEVERITY_LABEL as Q, reviewChange as R, hostAuth as S, commandRunner as T, census as U, testsFirst as V, dirReader as W, parseDiff as X, newFileDiff as Y, SEVERITIES as Z, followFix as _, runMergeQueue as a, parseError as b, FACET_AXES as c, generateTests as d, proveResolution as f, fixTraced as g, revertOne as h, queueOrder as i, valueCopy as j, writeProven as k, checkFacetQuery as l, fixAll as m, HUNT_CLASSES as n, EFFORTS as o, touchesFor as p, probeNames as q, gitQueueRepo as r, EFFORT_UNMEASURED as s, huntRepository as t, applyTouches as u, locate as v, githubRest as w, traceError as x, openTraced as y, stackChain as z };
|