AnyWhichWay, LLC

Changing Possible


AnyWhichWay provides a variety of on demand services and data via RapidAPI as well as a number of open source JavaScript repositories.


Cloaked JS

No client side JavaScript protection is 100% secure, but Cloak JS can make it much harder for people to use your intellectual property without permission, bots to automate your site, or hackers to take advantage of security holes.

Every time you process your JavaScript with Cloak JS it generates different code that executes the same way as the original source.

Cloak JS can also encrypt all variable bindings as well as functions that do not depend on closures.

Finally, Cloak JS can lock your code so that it only runs on specific domains while preventing the use of a debugger to to code analysis.

See at or RapidAPI.

Postal Codes

Retrieve latitude/longitude, timezone, place name and state, province, county or their abbreviations for zipcodes/postalcodes worldwide. Not all data is available for all codes.

See on RapidAPI.


Get hourly and weekly weather by US postal code.

See on RapidAPI.

Open Source

This is a selection of our efforts:


Faster than fast, smaller than micro … a nano speed and size (780 Brotili bytes) memoize for single and multiple argument functions.

The devs caiogondim and planttheidea have produced great memoizers. We analyzed their code to see if we could build something faster than fast-memoize and smaller than micro-memoize while adding back some of the functionality of moize removed in micro-memoize. We think we have done it … but credit to them … we just merged the best ideas in both and e liminated excess code.

During development we also discovered that despite its popularity and goal to be the fastest possible memoizer, fast-memoize is actually quite slow when it comes to multiple argument functions because it uses JSON.stringify to generate a single key generator for all arguments and only memoizes out to 3 arguments. This is not to say it should not be used, it also seems to have the cleanest software architecture and it may be theoretically possible to write a high-speed multi-argument plugin. And, MANY people are very happy with it.

nano-memoize doesn’t have a lot of GitHub stars, but it has reached over 19K weekly dowloads on NPM and issues are actively addressed. Also available on Github.


Like nano-memoize, we believe this is the fastest JavaScript function of its kind, although not the smallest. Intersector supports the intersection of arrays containing primitive data, objects, or mixed types at 2x to 3x the speed of other approaches. Available at NPM or Github.


Integrated performance testing for Mocha based unit testing.

Benchtest provides a performance testing wrapper around the Mocha unit test runner. It can be used as a light weight, not as quite as powerful, but far easier to configure alternative to the stellar Benchmark JS library.

Benchtest set-up can be done in as little as three lines of code for Node projects.

const benchtest = require("benchtest");
mocha.afterEach(function () { benchtest.test(this.currentTest); });
mocha.after(() =>{log:"md"}));

Available at NPM or Github.


Cartesian cross-product as a first class object.

Naive cross-products can rapidly consume vast amounts of memory and degrade exponentially in performance. CXProduct supports high-speed, low memory virtual Cartesian cross-product creation and use through the use of lazy evaluation, i.e. rows of the cross-product are not created until needed by calling functions. Avialable at NPM or Github.


Small, focused full-text indexing and search for any JavaScript application.

Txi does just two things:

It creates a full text index of strings or JavaScript objects passed to it and associates entries with an id also passed in.

It supports index searching and returns a rank ordered list of matches including the id to be used by the calling application to retrieve the original data.

Txi indexes are just JSON objects that can be saved and restored like any other JSON object.

By default, txi minimizes false positives and false negatives by using a scoring mechanism that takes into account stems, misspellings, trigrams, and disemvoweled versions of words. This can be tuned to reduce memory usage if desired.

Available at NPM or Github.


A Proxy Based Implementation Of Object.observe, Array.observe plus Object.deepObserve. Object.observe and Array.observe have now been deprecated from Chrome and standards tracks. Despite reasonable philosophical concerns regarding the use of observers and the fact they have been deprecated from Chrome and were never fully supported in other JavaScript engines, some people still want to use them but some developers may still find them useful or require them for backward compatibility in Chrome applications. Available at NPM or Github.


Send email to [email protected]