UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

46 lines (45 loc) 1.96 kB
"use strict"; 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; }