Files
NapCatQQ/.pnpm-store/v3/files/98/e0855408e636025628f009952012a486ac682296ac51e2c91f2342ce965b614af24034e0ce0524051c2931d8e74df28a882cb2bf9e8331e76883d7bbee3c14
T
TanTan e311ca3275
Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

96 lines
3.2 KiB
Plaintext

"use strict"
const {
CONSTRUCT,
ReferenceTracker,
} = require("@eslint-community/eslint-utils")
const {
definePrototypeMethodHandler,
} = require("../util/define-prototype-method-handler")
const { getSourceCode } = require("eslint-compat-utils")
/**
* @param {Node|undefined} node
* @returns {boolean}
*/
function isSpreadElement(node) {
return node && node.type === "SpreadElement"
}
module.exports = {
meta: {
docs: {
description: "disallow resizable and growable ArrayBuffers",
category: "ES2024",
recommended: false,
url: "http://eslint-community.github.io/eslint-plugin-es-x/rules/no-resizable-and-growable-arraybuffers.html",
},
fixable: null,
messages: {
forbiddenForResizableArrayBuffer:
"ES2024 Resizable ArrayBuffer is forbidden.",
forbiddenForGrowableSharedArrayBuffer:
"ES2024 Growable SharedArrayBuffer is forbidden.",
},
schema: [
{
type: "object",
properties: {
aggressive: { type: "boolean" },
},
additionalProperties: false,
},
],
type: "problem",
},
create(context) {
return {
...definePrototypeMethodHandler(
context,
{
ArrayBuffer: ["maxByteLength", "resizable", "resize"],
SharedArrayBuffer: ["grow", "growable", "maxByteLength"],
},
{
createReport({ className }) {
return {
messageId:
className === "ArrayBuffer"
? "forbiddenForResizableArrayBuffer"
: "forbiddenForGrowableSharedArrayBuffer",
}
},
},
),
"Program:exit"(program) {
const sourceCode = getSourceCode(context)
const tracker = new ReferenceTracker(
sourceCode.getScope(program),
)
for (const { node, path } of tracker.iterateGlobalReferences({
ArrayBuffer: { [CONSTRUCT]: true },
SharedArrayBuffer: { [CONSTRUCT]: true },
})) {
if (node.type !== "NewExpression") {
continue
}
const args = node.arguments.slice(0, 2)
if (args.some(isSpreadElement)) {
continue
}
const reportedNode = args[1]
if (reportedNode) {
context.report({
node: reportedNode,
messageId:
path[0] === "ArrayBuffer"
? "forbiddenForResizableArrayBuffer"
: "forbiddenForGrowableSharedArrayBuffer",
})
}
}
},
}
},
}