locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
102 lines (101 loc) • 2.93 kB
JavaScript
export const entriesOfPhpAssoc = (value) => {
return Object.entries(value);
};
export function normalizeArrayKey(key) {
if (/^(0|-?[1-9]\d*)$/.test(key)) {
const numericKey = Number(key);
if (Number.isSafeInteger(numericKey)) {
return numericKey;
}
}
return key;
}
export function isPhpNullish(value) {
return typeof value === 'undefined' || value === null;
}
export function isPhpList(value) {
return Array.isArray(value);
}
export function isObjectLike(value) {
return typeof value === 'object' && value !== null;
}
export function isPhpAssocObject(value) {
return isObjectLike(value) && !isPhpList(value);
}
export function isPhpScalar(value) {
return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
}
export function isPhpKey(value) {
return typeof value === 'string' || typeof value === 'number';
}
export 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));
}
export function isPhpCallable(value) {
return typeof value === 'function';
}
export 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);
}
export function assertIsObjectLike(value, message = 'Expected object-like value') {
if (!isObjectLike(value)) {
throw new TypeError(message);
}
}
export function assertIsPhpAssocObject(value, message = 'Expected associative object value') {
if (!isPhpAssocObject(value)) {
throw new TypeError(message);
}
}
export function assertIsPhpList(value, message = 'Expected list value') {
if (!isPhpList(value)) {
throw new TypeError(message);
}
}
export function assertIsPhpKey(value, message = 'Expected key value') {
if (!isPhpKey(value)) {
throw new TypeError(message);
}
}
export function assertIsNumericLike(value, message = 'Expected numeric-like value') {
if (!isNumericLike(value)) {
throw new TypeError(message);
}
}
export function assertIsPhpCallable(value, message = 'Expected callable value') {
if (!isPhpCallable(value)) {
throw new TypeError(message);
}
}
export function isPhpArrayObject(value) {
return isObjectLike(value);
}
export function toPhpArrayObject(value) {
if (isPhpArrayObject(value)) {
return value;
}
return {};
}