chain-able
Version:
interfaces that describe their intentions.
82 lines (79 loc) • 5.69 kB
JavaScript
// @TODO could also just have files for .set .has .get .delete .clear...
// @TODO:
// just pass in as first param!
// var SET = 1
// var GET = 2
// var HAS = 4
// var DELETE = 8
// const isSet = require('../is/set')
// const ArrayFrom = require('../util/from')
// const isUndefined = require('../is/undefined')
// const concat = require('../concat')
// const toarr = require('../to-arr')
//
// const store = {}
//
// const ensureInitialized = (name, value, mapOrSet) => {
// if (isUndefined(store[name])) store[name] = new Map()
// }
//
// const has = (key, prop) => {
// return isUndefined(prop) ? !!store[key].size : store[key].has(prop)
// }
//
// const get = (key, prop, fallback = []) => {
// return has(key, prop) ? store[key].get(prop) : fallback
// }
//
// const set = (key, prop, value) => {
// const storage = store[key]
// // when it's a set, we have no `prop`, we just have .add
// // so `prop = value` && `value = undefined`
// if (isSet(storage)) {
// storage.add(prop)
// }
// else {
// const existing = storage.get(prop)
// const val = concat(existing, value)
// storage.set(prop, val)
// }
// }
// const cache = (key, prop, value) => {
// /* prettier-ignore */
// if (isUndefined(value)) {
// // when we want to just access the property, return an array
// // @example `.meta('transformers')`
// if (isUndefined(prop)) {
// if (isUndefined(store[key])) return []
// else return store[key].size === 0 ? [] : ArrayFrom(store[key])
// }
// // we have `key, prop`
// //
// // 1: should `prop` be a value, (isSet?)
// else if (isInKeyMapAsSet(key)) {
// ensureInitialized(key)
// set(key, prop)
// }
// // 2: prop is a key, we want to return the [..] for that specific property
// // @example `.meta('transformers', 'eh')`
// else if (isUndefined(store[key])) return []
// else return toarr(get(key, prop))
// }
// // we have `key, prop, value`
// else {
// ensureInitialized(key)
// // we have a value, let's add it
// set(key, prop, value)
// }
// }
//
// const scoped = cache('segments', {default: []})
//
// // has/get
// if (scoped('key')) {
// // todo eh
// }
//
// // set
// scoped('key', 'value')
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGVkLmpzIiwic291cmNlcyI6WyJzY29wZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQFRPRE8gY291bGQgYWxzbyBqdXN0IGhhdmUgZmlsZXMgZm9yIC5zZXQgLmhhcyAuZ2V0IC5kZWxldGUgLmNsZWFyLi4uXG5cbi8vIEBUT0RPOlxuLy8ganVzdCBwYXNzIGluIGFzIGZpcnN0IHBhcmFtIVxuLy8gdmFyIFNFVCA9IDFcbi8vIHZhciBHRVQgPSAyXG4vLyB2YXIgSEFTID0gNFxuLy8gdmFyIERFTEVURSA9IDhcblxuLy8gY29uc3QgaXNTZXQgPSByZXF1aXJlKCcuLi9pcy9zZXQnKVxuLy8gY29uc3QgQXJyYXlGcm9tID0gcmVxdWlyZSgnLi4vdXRpbC9mcm9tJylcbi8vIGNvbnN0IGlzVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaXMvdW5kZWZpbmVkJylcbi8vIGNvbnN0IGNvbmNhdCA9IHJlcXVpcmUoJy4uL2NvbmNhdCcpXG4vLyBjb25zdCB0b2FyciA9IHJlcXVpcmUoJy4uL3RvLWFycicpXG4vL1xuLy8gY29uc3Qgc3RvcmUgPSB7fVxuLy9cbi8vIGNvbnN0IGVuc3VyZUluaXRpYWxpemVkID0gKG5hbWUsIHZhbHVlLCBtYXBPclNldCkgPT4ge1xuLy8gICBpZiAoaXNVbmRlZmluZWQoc3RvcmVbbmFtZV0pKSBzdG9yZVtuYW1lXSA9IG5ldyBNYXAoKVxuLy8gfVxuLy9cbi8vIGNvbnN0IGhhcyA9IChrZXksIHByb3ApID0+IHtcbi8vICAgcmV0dXJuIGlzVW5kZWZpbmVkKHByb3ApID8gISFzdG9yZVtrZXldLnNpemUgOiBzdG9yZVtrZXldLmhhcyhwcm9wKVxuLy8gfVxuLy9cbi8vIGNvbnN0IGdldCA9IChrZXksIHByb3AsIGZhbGxiYWNrID0gW10pID0+IHtcbi8vICAgcmV0dXJuIGhhcyhrZXksIHByb3ApID8gc3RvcmVba2V5XS5nZXQocHJvcCkgOiBmYWxsYmFja1xuLy8gfVxuLy9cbi8vIGNvbnN0IHNldCA9IChrZXksIHByb3AsIHZhbHVlKSA9PiB7XG4vLyAgIGNvbnN0IHN0b3JhZ2UgPSBzdG9yZVtrZXldXG4vLyAgIC8vIHdoZW4gaXQncyBhIHNldCwgd2UgaGF2ZSBubyBgcHJvcGAsIHdlIGp1c3QgaGF2ZSAuYWRkXG4vLyAgIC8vIHNvIGBwcm9wID0gdmFsdWVgICYmIGB2YWx1ZSA9IHVuZGVmaW5lZGBcbi8vICAgaWYgKGlzU2V0KHN0b3JhZ2UpKSB7XG4vLyAgICAgc3RvcmFnZS5hZGQocHJvcClcbi8vICAgfVxuLy8gICBlbHNlIHtcbi8vICAgICBjb25zdCBleGlzdGluZyA9IHN0b3JhZ2UuZ2V0KHByb3ApXG4vLyAgICAgY29uc3QgdmFsID0gY29uY2F0KGV4aXN0aW5nLCB2YWx1ZSlcbi8vICAgICBzdG9yYWdlLnNldChwcm9wLCB2YWwpXG4vLyAgIH1cbi8vIH1cbi8vIGNvbnN0IGNhY2hlID0gKGtleSwgcHJvcCwgdmFsdWUpID0+IHtcbi8vICAgLyogcHJldHRpZXItaWdub3JlICovXG4vLyAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbi8vICAgICAvLyB3aGVuIHdlIHdhbnQgdG8ganVzdCBhY2Nlc3MgdGhlIHByb3BlcnR5LCByZXR1cm4gYW4gYXJyYXlcbi8vICAgICAvLyBAZXhhbXBsZSBgLm1ldGEoJ3RyYW5zZm9ybWVycycpYFxuLy8gICAgIGlmIChpc1VuZGVmaW5lZChwcm9wKSkge1xuLy8gICAgICAgaWYgKGlzVW5kZWZpbmVkKHN0b3JlW2tleV0pKSByZXR1cm4gW11cbi8vICAgICAgIGVsc2UgcmV0dXJuIHN0b3JlW2tleV0uc2l6ZSA9PT0gMCA/IFtdIDogQXJyYXlGcm9tKHN0b3JlW2tleV0pXG4vLyAgICAgfVxuLy8gICAgIC8vIHdlIGhhdmUgYGtleSwgcHJvcGBcbi8vICAgICAvL1xuLy8gICAgIC8vIDE6IHNob3VsZCBgcHJvcGAgYmUgYSB2YWx1ZSwgKGlzU2V0Pylcbi8vICAgICBlbHNlIGlmIChpc0luS2V5TWFwQXNTZXQoa2V5KSkge1xuLy8gICAgICAgZW5zdXJlSW5pdGlhbGl6ZWQoa2V5KVxuLy8gICAgICAgc2V0KGtleSwgcHJvcClcbi8vICAgICB9XG4vLyAgICAgLy8gMjogcHJvcCBpcyBhIGtleSwgd2Ugd2FudCB0byByZXR1cm4gdGhlIFsuLl0gZm9yIHRoYXQgc3BlY2lmaWMgcHJvcGVydHlcbi8vICAgICAvLyBAZXhhbXBsZSBgLm1ldGEoJ3RyYW5zZm9ybWVycycsICdlaCcpYFxuLy8gICAgIGVsc2UgaWYgKGlzVW5kZWZpbmVkKHN0b3JlW2tleV0pKSByZXR1cm4gW11cbi8vICAgICBlbHNlIHJldHVybiB0b2FycihnZXQoa2V5LCBwcm9wKSlcbi8vICAgfVxuLy8gICAvLyB3ZSBoYXZlIGBrZXksIHByb3AsIHZhbHVlYFxuLy8gICBlbHNlIHtcbi8vICAgICBlbnN1cmVJbml0aWFsaXplZChrZXkpXG4vLyAgICAgLy8gd2UgaGF2ZSBhIHZhbHVlLCBsZXQncyBhZGQgaXRcbi8vICAgICBzZXQoa2V5LCBwcm9wLCB2YWx1ZSlcbi8vICAgfVxuLy8gfVxuLy9cbi8vIGNvbnN0IHNjb3BlZCA9IGNhY2hlKCdzZWdtZW50cycsIHtkZWZhdWx0OiBbXX0pXG4vL1xuLy8gLy8gaGFzL2dldFxuLy8gaWYgKHNjb3BlZCgna2V5JykpIHtcbi8vICAgLy8gdG9kbyBlaFxuLy8gfVxuLy9cbi8vIC8vIHNldFxuLy8gc2NvcGVkKCdrZXknLCAndmFsdWUnKVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==