@clerk/shared
Version:
Internal package utils used by the Clerk SDKs
1 lines • 4.04 kB
Source Map (JSON)
{"version":3,"sources":["../src/underscore.ts"],"sourcesContent":["/**\n * Converts an array of strings to a comma-separated sentence\n * @param items {Array<string>}\n * @returns {string} Returns a string with the items joined by a comma and the last item joined by \", or\"\n */\nexport const toSentence = (items: string[]): string => {\n // TODO: Once Safari supports it, use Intl.ListFormat\n if (items.length == 0) {\n return '';\n }\n if (items.length == 1) {\n return items[0];\n }\n let sentence = items.slice(0, -1).join(', ');\n sentence += `, or ${items.slice(-1)}`;\n return sentence;\n};\n\nconst IP_V4_ADDRESS_REGEX =\n /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n\nexport function isIPV4Address(str: string | undefined | null): boolean {\n return IP_V4_ADDRESS_REGEX.test(str || '');\n}\n\nexport function titleize(str: string | undefined | null): string {\n const s = str || '';\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function snakeToCamel(str: string | undefined): string {\n return str ? str.replace(/([-_][a-z])/g, match => match.toUpperCase().replace(/-|_/, '')) : '';\n}\n\nexport function camelToSnake(str: string | undefined): string {\n return str ? str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`) : '';\n}\n\nconst createDeepObjectTransformer = (transform: any) => {\n const deepTransform = (obj: any): any => {\n if (!obj) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(el => {\n if (typeof el === 'object' || Array.isArray(el)) {\n return deepTransform(el);\n }\n return el;\n });\n }\n\n const copy = { ...obj };\n const keys = Object.keys(copy);\n for (const oldName of keys) {\n const newName = transform(oldName.toString());\n if (newName !== oldName) {\n copy[newName] = copy[oldName];\n delete copy[oldName];\n }\n if (typeof copy[newName] === 'object') {\n copy[newName] = deepTransform(copy[newName]);\n }\n }\n return copy;\n };\n\n return deepTransform;\n};\n\n/**\n * Transforms camelCased objects/ arrays to snake_cased.\n * This function recursively traverses all objects and arrays of the passed value\n * camelCased keys are removed.\n */\nexport const deepCamelToSnake = createDeepObjectTransformer(camelToSnake);\n\n/**\n * Transforms snake_cased objects/ arrays to camelCased.\n * This function recursively traverses all objects and arrays of the passed value\n * camelCased keys are removed.\n */\nexport const deepSnakeToCamel = createDeepObjectTransformer(snakeToCamel);\n"],"mappings":";AAKO,IAAM,aAAa,CAAC,UAA4B;AAErD,MAAI,MAAM,UAAU,GAAG;AACrB,WAAO;AAAA,EACT;AACA,MAAI,MAAM,UAAU,GAAG;AACrB,WAAO,MAAM,CAAC;AAAA,EAChB;AACA,MAAI,WAAW,MAAM,MAAM,GAAG,EAAE,EAAE,KAAK,IAAI;AAC3C,cAAY,QAAQ,MAAM,MAAM,EAAE,CAAC;AACnC,SAAO;AACT;AAEA,IAAM,sBACJ;AAEK,SAAS,cAAc,KAAyC;AACrE,SAAO,oBAAoB,KAAK,OAAO,EAAE;AAC3C;AAEO,SAAS,SAAS,KAAwC;AAC/D,QAAM,IAAI,OAAO;AACjB,SAAO,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC;AAC9C;AAEO,SAAS,aAAa,KAAiC;AAC5D,SAAO,MAAM,IAAI,QAAQ,gBAAgB,WAAS,MAAM,YAAY,EAAE,QAAQ,OAAO,EAAE,CAAC,IAAI;AAC9F;AAEO,SAAS,aAAa,KAAiC;AAC5D,SAAO,MAAM,IAAI,QAAQ,UAAU,YAAU,IAAI,OAAO,YAAY,CAAC,EAAE,IAAI;AAC7E;AAEA,IAAM,8BAA8B,CAAC,cAAmB;AACtD,QAAM,gBAAgB,CAAC,QAAkB;AACvC,QAAI,CAAC,KAAK;AACR,aAAO;AAAA,IACT;AAEA,QAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,aAAO,IAAI,IAAI,QAAM;AACnB,YAAI,OAAO,OAAO,YAAY,MAAM,QAAQ,EAAE,GAAG;AAC/C,iBAAO,cAAc,EAAE;AAAA,QACzB;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,UAAM,OAAO,EAAE,GAAG,IAAI;AACtB,UAAM,OAAO,OAAO,KAAK,IAAI;AAC7B,eAAW,WAAW,MAAM;AAC1B,YAAM,UAAU,UAAU,QAAQ,SAAS,CAAC;AAC5C,UAAI,YAAY,SAAS;AACvB,aAAK,OAAO,IAAI,KAAK,OAAO;AAC5B,eAAO,KAAK,OAAO;AAAA,MACrB;AACA,UAAI,OAAO,KAAK,OAAO,MAAM,UAAU;AACrC,aAAK,OAAO,IAAI,cAAc,KAAK,OAAO,CAAC;AAAA,MAC7C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAOO,IAAM,mBAAmB,4BAA4B,YAAY;AAOjE,IAAM,mBAAmB,4BAA4B,YAAY;","names":[]}