UNPKG

@anycable/turbo-stream

Version:

AnyCable Client plugin to support Turbo Streams

34 lines (31 loc) 1.61 kB
// Based on https://github.com/nathan7/snakeize // // This software is released under the MIT license: // Permission is hereby granted, free of charge, to any person obtaining a copy of // this software and associated documentation files (the "Software"), to deal in // the Software without restriction, including without limitation the rights to // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of // the Software, and to permit persons to whom the Software is furnished to do so, // subject to the following conditions: // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. export default function walk(obj) { if (!obj || typeof obj !== 'object') return obj if (obj instanceof Date || obj instanceof RegExp) return obj if (Array.isArray(obj)) return obj.map(walk) return Object.keys(obj).reduce((acc, key) => { let camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, (m, x) => { return '_' + x.toLowerCase() }) acc[camel] = walk(obj[key]) return acc }, {}) }