locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
124 lines (123 loc) • 3.73 kB
JavaScript
;
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 {};
}