/* * Copyright (c) 2022. * Author Peter Placzek (tada5hi) * For the full copyright and license information, * view the LICENSE file that was distributed with this source code. */ import { camelCase, snakeCase } from 'change-case'; export function buildUrlRelationsSuffix(uriResourceName: string, uriResourceId: number | string, UriRelationName: string, type: 'self' | 'related') { let url = uriResourceName+'/'+uriResourceId; switch (type) { case 'self': url += '/relationships' break; case 'related': break; } url += '/'+UriRelationName; return url; } function changeArrayKeyCase(stringCase: 'camelCase' | 'snakeCase', data: T) : T { for(let i=0; i(stringCase: 'camelCase' | 'snakeCase', data: T) : T { const prototype = Object.prototype.toString.call(data); switch (prototype) { case '[object Array]': return changeArrayKeyCase(stringCase, data as any) as T; case '[object Object]': let ob : Record = {}; for(let key in data) { let caseKey : string; switch (stringCase) { case "camelCase": caseKey = camelCase(key); break; case "snakeCase": caseKey = snakeCase(key); break; } const childPrototype = Object.prototype.toString.call(data[key]); switch (childPrototype) { case '[object Array]': ob[caseKey] = changeArrayKeyCase(stringCase, data[key] as any); break; case '[object Object]': ob[caseKey] = changeKeyCase(stringCase, data[key]); break; default: ob[caseKey] = data[key]; break; } } return ob as T; } return data; } export function changeResponseKeyCase(data: T) : T { return changeKeyCase('camelCase', data); } export function changeRequestKeyCase(data: T) : T { return changeKeyCase('snakeCase', data); } export type RequestRecord = { filter?: { [key: string] : any }, fields?: { [key: string] : string[] | string }, sort?: { [key: string] : 'asc' | 'desc' }, include?: string[], page?: { limit?: number, offset?: number } } export function formatRequestRecord(record?: RequestRecord) : string { if(typeof record === 'undefined' || record === null) return ''; let output : {[key: string] : any} = {}; let keys : string[] = ['filter', 'sort', 'include', 'page']; for(let i=0; i