locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
46 lines (45 loc) • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.get_defined_functions = get_defined_functions;
const _phpRuntimeState_ts_1 = require("../_helpers/_phpRuntimeState.js");
const _phpTypes_ts_1 = require("../_helpers/_phpTypes.js");
function get_defined_functions() {
// discuss at: https://locutus.io/php/get_defined_functions/
// parity verified: PHP 8.3
// original by: Brett Zamir (https://brett-zamir.me)
// improved by: Brett Zamir (https://brett-zamir.me)
// note 1: Returns an array of global function names. Unlike PHP,
// note 1: JavaScript doesn't distinguish between user and internal functions.
// example 1: var $funcs = get_defined_functions()
// example 1: var $result = Array.isArray($funcs) && $funcs.length > 0
// returns 1: true
(0, _phpRuntimeState_ts_1.ensurePhpRuntimeState)();
const arr = [];
const already = {};
const globalScope = (0, _phpRuntimeState_ts_1.getPhpGlobalScope)();
for (const i in globalScope) {
try {
const topLevelValue = globalScope[i];
if (typeof topLevelValue === 'function') {
if (!already[i]) {
already[i] = 1;
arr.push(i);
}
}
else if (typeof topLevelValue === 'object' && topLevelValue !== null) {
const nestedObject = (0, _phpTypes_ts_1.toPhpArrayObject)(topLevelValue);
for (const j in nestedObject) {
if (typeof nestedObject[j] === 'function' && !already[j]) {
already[j] = 1;
arr.push(j);
}
}
}
}
catch (_e) {
// Some objects in Firefox throw exceptions when their
// properties are accessed (e.g., sessionStorage)
}
}
return arr;
}