First upload version 0.0.1

This commit is contained in:
Neyra
2026-02-05 15:27:49 +08:00
commit 8e9b7201ed
4182 changed files with 593136 additions and 0 deletions

50
node_modules/node-api-headers/lib/clang-utils.js generated vendored Normal file
View File

@@ -0,0 +1,50 @@
'use strict';
const { spawn } = require('child_process');
/**
* @param {Array<string>} [args]
* @returns {Promise<{exitCode: number | null, stdout: string, stderr: string}>}
*/
async function runClang(args = []) {
try {
const { exitCode, stdout, stderr } = await new Promise((resolve, reject) => {
const spawned = spawn('clang',
['-Xclang', ...args]
);
let stdout = '';
let stderr = '';
spawned.stdout?.on('data', (data) => {
stdout += data.toString('utf-8');
});
spawned.stderr?.on('data', (data) => {
stderr += data.toString('utf-8');
});
spawned.on('exit', function (exitCode) {
resolve({ exitCode, stdout, stderr });
});
spawned.on('error', function (err) {
reject(err);
});
});
if (exitCode !== 0) {
throw new Error(`clang exited with non-zero exit code ${exitCode}. stderr: ${stderr ? stderr : '<empty>'}`);
}
return { exitCode, stdout, stderr };
} catch (err) {
if (err.code === 'ENOENT') {
throw new Error('This tool requires clang to be installed.');
}
throw err;
}
}
module.exports = {
runClang
};

92
node_modules/node-api-headers/lib/parse-utils.js generated vendored Normal file
View File

@@ -0,0 +1,92 @@
const parser = require("acorn");
/**
* @param {string} text Code to evaluate
* @returns {boolean | undefined} The result of the evaluation, `undefined` if
* parsing failed or the result is unknown.
*/
function evaluate(text) {
try {
const ast = parser.parse(text, { ecmaVersion: 2020 });
const expressionStatement = ast.body[0];
if (expressionStatement.type !== "ExpressionStatement") {
throw new Error("Expected an ExpressionStatement");
}
return visitExpression(expressionStatement.expression);
} catch {
// Return an unknown result if parsing failed
return undefined;
}
}
/**
* @param {import("acorn").Expression} node
*/
const visitExpression = (node) => {
if (node.type === "LogicalExpression") {
return visitLogicalExpression(node);
} else if (node.type === "UnaryExpression") {
return visitUnaryExpression(node);
} else if (node.type === "CallExpression") {
return visitCallExpression(node);
} else {
throw new Error(`Unknown node type: ${node.type} ${JSON.stringify(node)}`);
}
};
/**
* @param {import("acorn").LogicalExpression} node
*/
const visitLogicalExpression = (node) => {
const left = visitExpression(node.left);
const right = visitExpression(node.right);
if (node.operator === "&&") {
// We can shortcircuit regardless of `unknown` if either are false.
if (left === false || right === false) {
return false;
} else if (left === undefined || right === undefined) {
return undefined;
} else {
return left && right;
}
} else if (node.operator === "||") {
if (left === undefined || right === undefined) {
return undefined;
} else {
return left || right;
}
}
};
/**
* @param {import("acorn").UnaryExpression} node
*/
const visitUnaryExpression = (node) => {
const argument = visitExpression(node.argument);
if (typeof argument === 'boolean') {
return !argument;
}
};
/**
* @param {import("acorn").CallExpression} node
*/
const visitCallExpression = (node) => {
const isDefinedExperimentalCall =
// is `defined(arg)` call
node.callee.type === 'Identifier' && node.callee.name === 'defined' && node.arguments.length == 1
// and that arg is `NAPI_EXPERIMENTAL`
&& node.arguments[0].type === 'Identifier' && node.arguments[0].name === 'NAPI_EXPERIMENTAL';
if (isDefinedExperimentalCall) {
return false;
}
};
module.exports = {
evaluate
};