Qim: Select from Your Immutable JavaScript Cake and Update It Symmetrically Too
Blog post from Zapier
Qim is a JavaScript library designed for handling immutable data with simple yet powerful query paths, offering a unique approach different from existing libraries like Immutable.js or Lodash. It allows for complex selections and updates in deeply nested JavaScript objects and arrays without requiring special wrappers, proxies, or prototypes, thus maintaining compatibility with other libraries that use plain JavaScript data. Qim emphasizes a symmetric approach, meaning the same query path can be used for both selecting and updating data, which simplifies the process compared to other methods. The library is data-last and curried, drawing comparisons to Lodash/fp and Ramda, but with a focus on performance and expressiveness that avoids the need for marshalling between different data formats. It introduces the concept of "navigators," borrowed from the Clojure library Specter, allowing for more sophisticated queries beyond simple strings. While Qim boasts efficiency and expressiveness, it is a relatively new tool with potential for further development and is currently being used in production at Zapier with the expectation of cautious version management due to possible changes.