UNPKG

locutus

Version:

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

124 lines (123 loc) 3.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.entriesOfPhpAssoc = void 0; exports.normalizeArrayKey = normalizeArrayKey; exports.isPhpNullish = isPhpNullish; exports.isPhpList = isPhpList; exports.isObjectLike = isObjectLike; exports.isPhpAssocObject = isPhpAssocObject; exports.isPhpScalar = isPhpScalar; exports.isPhpKey = isPhpKey; exports.isNumericLike = isNumericLike; exports.isPhpCallable = isPhpCallable; exports.isPhpCallableDescriptor = isPhpCallableDescriptor; exports.assertIsObjectLike = assertIsObjectLike; exports.assertIsPhpAssocObject = assertIsPhpAssocObject; exports.assertIsPhpList = assertIsPhpList; exports.assertIsPhpKey = assertIsPhpKey; exports.assertIsNumericLike = assertIsNumericLike; exports.assertIsPhpCallable = assertIsPhpCallable; exports.isPhpArrayObject = isPhpArrayObject; exports.toPhpArrayObject = toPhpArrayObject; const entriesOfPhpAssoc = (value) => { return Object.entries(value); }; exports.entriesOfPhpAssoc = entriesOfPhpAssoc; function normalizeArrayKey(key) { if (/^(0|-?[1-9]\d*)$/.test(key)) { const numericKey = Number(key); if (Number.isSafeInteger(numericKey)) { return numericKey; } } return key; } function isPhpNullish(value) { return typeof value === 'undefined' || value === null; } function isPhpList(value) { return Array.isArray(value); } function isObjectLike(value) { return typeof value === 'object' && value !== null; } function isPhpAssocObject(value) { return isObjectLike(value) && !isPhpList(value); } function isPhpScalar(value) { return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'; } function isPhpKey(value) { return typeof value === 'string' || typeof value === 'number'; } function isNumericLike(value) { if (typeof value === 'number') { return Number.isFinite(value); } if (typeof value === 'bigint') { return true; } if (typeof value !== 'string') { return false; } const trimmed = value.trim(); if (trimmed === '') { return false; } return Number.isFinite(Number(trimmed)); } function isPhpCallable(value) { return typeof value === 'function'; } function isPhpCallableDescriptor(value) { if (typeof value === 'string') { return true; } if (isPhpCallable(value)) { return true; } if (!Array.isArray(value) || value.length < 2) { return false; } const callableDescriptor = value[1]; return typeof callableDescriptor === 'string' || isPhpCallable(callableDescriptor); } function assertIsObjectLike(value, message = 'Expected object-like value') { if (!isObjectLike(value)) { throw new TypeError(message); } } function assertIsPhpAssocObject(value, message = 'Expected associative object value') { if (!isPhpAssocObject(value)) { throw new TypeError(message); } } function assertIsPhpList(value, message = 'Expected list value') { if (!isPhpList(value)) { throw new TypeError(message); } } function assertIsPhpKey(value, message = 'Expected key value') { if (!isPhpKey(value)) { throw new TypeError(message); } } function assertIsNumericLike(value, message = 'Expected numeric-like value') { if (!isNumericLike(value)) { throw new TypeError(message); } } function assertIsPhpCallable(value, message = 'Expected callable value') { if (!isPhpCallable(value)) { throw new TypeError(message); } } function isPhpArrayObject(value) { return isObjectLike(value); } function toPhpArrayObject(value) { if (isPhpArrayObject(value)) { return value; } return {}; }