{"_id":"space-lift","_rev":"58-08daea1b3ef848fb3ab1ec302046ca41","name":"space-lift","description":"TypeScript Array, Object, Map, Set, Union, Enum utils","dist-tags":{"latest":"1.0.4","beta":"1.0.0-beta.14"},"versions":{"0.0.1":{"name":"space-lift","version":"0.0.1","description":"JS/TS array, object utils","main":"lib","typings":"lib/index.d.ts","files":["lib"],"scripts":{"build":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./lib --declaration --noImplicitAny --strictNullChecks --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc test/mocha.d.ts test/global.d.ts test/test.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.0.0","option.ts":"0.1.5"},"devDependencies":{"typescript":"2.2.0-dev.20170201","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore"],"gitHead":"015f11e8e34a67a36f9afe0f1cf99220dc47206c","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.0.1","_shasum":"d99aa6f8adb50cc0d9de28cb2526fdb77045c65e","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"agl@zengularity.com"},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"dist":{"shasum":"d99aa6f8adb50cc0d9de28cb2526fdb77045c65e","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.0.1.tgz","integrity":"sha512-aBp8zYtsd5/ea+CQi5lHkyKhBpeD6QlPtx/mH51mTVfavo9FGvq6w1ayyqbTBI2q2kIfHLn5QejqcxjvY/McfQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwPffz5mZ9dmgcXG3fby6iNnYD0BN57vfsWErFanfJ6wIgWrQRCVgeOrq7LYQwD3ZPtXo58Fm9Cl4edu7qt6miMVs="}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/space-lift-0.0.1.tgz_1486648316314_0.06302689621225"},"directories":{}},"0.0.2":{"name":"space-lift","version":"0.0.2","description":"JS/TS array, object utils","main":"index.js","typings":"index.d.ts","files":["index.js","index.d.ts","all.js","all.d.ts","transform.js","transform.d.ts","array","object"],"scripts":{"build":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./ --declaration --noImplicitAny --strictNullChecks --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc test/mocha.d.ts test/global.d.ts test/test.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.0.0","option.ts":"0.1.5"},"devDependencies":{"typescript":"2.2.0-dev.20170201","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore"],"gitHead":"1f53d1aa746e8fcb69f5862e08b72c0a1033b396","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.0.2","_shasum":"6ac9e2621b9a38d083021cb1a4f6341158f63299","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"agl@zengularity.com"},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"dist":{"shasum":"6ac9e2621b9a38d083021cb1a4f6341158f63299","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.0.2.tgz","integrity":"sha512-Sh/45cxogA+wfa2M0U/EycHAAEF6K/8pKR2Q2Y1Qt+rkDybgUFsc1KtQPIJgHDBFka9c6o2ZCUAqQ2ckQOblXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHG/LD0Opb8yriT8PDVcbzrCYNXeN+s5rrdPc8NaFt9FAiBtXK5cFPpnF39UM3IdD9HVXOn951L03bGQtJzSQv3cNA=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/space-lift-0.0.2.tgz_1486673887601_0.43515538750216365"},"directories":{}},"0.0.3":{"name":"space-lift","version":"0.0.3","description":"JS/TS array, object utils","main":"index.js","typings":"index.d.ts","files":["index.js","index.d.ts","all.js","all.d.ts","transform.js","transform.d.ts","array","object"],"scripts":{"build":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./ --declaration --noImplicitAny --strictNullChecks --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc test/mocha.d.ts test/global.d.ts test/test.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.0.0","option.ts":"0.1.6"},"devDependencies":{"typescript":"2.2.0-dev.20170201","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore"],"gitHead":"a1e3b321b611e3462ceadc747f729ac0481b62d0","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.0.3","_shasum":"429d8aaf7d26c80decaa3fe45f7102499a79dbb1","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"agl@zengularity.com"},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"dist":{"shasum":"429d8aaf7d26c80decaa3fe45f7102499a79dbb1","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.0.3.tgz","integrity":"sha512-smp687uWeKz9ZVHoZLrP36pUN4UoC0M+xT9Oh8ByplbYA1GGzpubbjPG8Gds24YpO3a2LocYZ/xrWy4qGyb9vQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID6vAlDax8/h7nZSaEznBOnTwLbJ13EfrLhDkuHpMWjDAiBAxl2DsBTrrXP+xW6xAhx0bsPiiwhtoLQhmQC7Yts8DA=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/space-lift-0.0.3.tgz_1487199527411_0.5097913187928498"},"directories":{}},"0.0.4":{"name":"space-lift","version":"0.0.4","description":"JS/TS array, object utils","main":"index.js","typings":"index.d.ts","files":["index.js","index.d.ts","all.js","all.d.ts","transform.js","transform.d.ts","array","object"],"scripts":{"build":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./ --declaration --noImplicitAny --strictNullChecks --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc test/mocha.d.ts test/global.d.ts test/test.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.0.0","option.ts":"0.1.6"},"devDependencies":{"typescript":"2.2.0-dev.20170201","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore"],"gitHead":"7c2ad67e10531f69a579b979f52382f6f53b3936","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.0.4","_shasum":"61fdcd7fd12519d4da530e8395bf0dd935f77793","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"agl@zengularity.com"},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"dist":{"shasum":"61fdcd7fd12519d4da530e8395bf0dd935f77793","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.0.4.tgz","integrity":"sha512-VTL0BBM/2JUOfuECA7tMU+FpvUV5azl6atjnix6yp36r1L0BmvsRGHnFsXBHAHuNbXQ3/abTAwiDzNY18S9XKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEv9MES844el6rUQgdK+9QzVv9t95nCID9xzRP4Wy6rwIgJZVzhTAhk5bWQFKDCHoEHIX2sw1mTaZbQE4Bqyx43nc="}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/space-lift-0.0.4.tgz_1487354138515_0.0033903024159371853"},"directories":{}},"0.0.5":{"name":"space-lift","version":"0.0.5","description":"JS/TS array, object utils","main":"index.js","typings":"index.d.ts","files":["index.js","index.d.ts","all.js","all.d.ts","transform.js","transform.d.ts","array","object","function"],"scripts":{"build":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./ --declaration --noImplicitAny --strictNullChecks --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/mocha.d.ts test/global.d.ts test/test.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.0.1","option.ts":"0.1.6"},"devDependencies":{"typescript":"next","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore"],"gitHead":"373f74583ef66e02461098d590eab9d246bd54c6","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.0.5","_shasum":"e22d05679922b8aec001112683362ce30c08d7f5","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"agl@zengularity.com"},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"dist":{"shasum":"e22d05679922b8aec001112683362ce30c08d7f5","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.0.5.tgz","integrity":"sha512-OwkrjaeGmJ7buoF3H8DP9elnXBS5jTQ7+DY/qtOYh2AeOEY8ObpC33tvgkUXZoPr6LHcOdcg9q3CqQUANo0iTg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZ91p02MxmGP5FE6mKQ5XBxCSTcy4hjcSme5fSBL/hUQIhAOHFugn7el11ECPzjDpZu87Md6OBFSlQRGMSPp8QVkYB"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/space-lift-0.0.5.tgz_1487514014756_0.6270332993008196"},"directories":{}},"0.1.0":{"name":"space-lift","version":"0.1.0","description":"JS/TS array, object utils","main":"index.js","typings":"index.d.ts","files":["index.js","index.d.ts","all.js","all.d.ts","transform.js","transform.d.ts","array","object","function"],"scripts":{"build":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./ --declaration --noImplicitAny --strictNullChecks --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/mocha.d.ts test/global.d.ts test/test.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.0.1","option.ts":"0.3.0"},"devDependencies":{"typescript":"next","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore"],"gitHead":"b095298b07810acec3144a7f1052d2847e30bfb3","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.1.0","_shasum":"cfd40e58ddc1d0791f933b31902d2683ba60b3a4","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"agl@zengularity.com"},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"dist":{"shasum":"cfd40e58ddc1d0791f933b31902d2683ba60b3a4","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.1.0.tgz","integrity":"sha512-vyf423yLdcZ/2ULkNmETdJ5swXzPvRCygVOGllct0xCEdnkCkTv0gPP19Dl1qcNA/2Ej6clbx165TToaoOYLkQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGPaNslZ1RzcV2iilF0MpFVEZQ8NS6Oxgu8ndVwah8GvAiA+i0khOroRbhFUResw938ya7VjreTJLIm3HJNQZVjmRg=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/space-lift-0.1.0.tgz_1491156134306_0.5613672689069062"},"directories":{}},"0.1.1":{"name":"space-lift","version":"0.1.1","description":"JS/TS array, object utils","main":"index.js","typings":"index.d.ts","files":["index.js","index.d.ts","all.js","all.d.ts","transform.js","transform.d.ts","array","object","function"],"scripts":{"build":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./ --declaration --noImplicitAny --strictNullChecks --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/mocha.d.ts test/global.d.ts test/test.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.0.2","option.ts":"0.3.0"},"devDependencies":{"typescript":"next","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore"],"gitHead":"912ab5630efd929f4e8282a3744a2fa606255df6","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.1.1","_shasum":"a6b03485b97899ef8d7a30d2def0344abc2f1fc5","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"agl@zengularity.com"},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"dist":{"shasum":"a6b03485b97899ef8d7a30d2def0344abc2f1fc5","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.1.1.tgz","integrity":"sha512-h3KdQQv0w8OYZDN/BuhboSST4nbI0MLjXswqHE773XKBm1QxmodZIp4jMH012IUObyiEkpBnRWeYpj/S9RF3OA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqJHgP3aqWqB86YSQrqWgoFwooHxWmVVssezem/iu3cgIhAJa/ikqHOY1gif1O0MdUjG6pfC6MmGQ0rI7skMjLX9LR"}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/space-lift-0.1.1.tgz_1492501538248_0.5004463237710297"},"directories":{}},"0.2.0":{"name":"space-lift","version":"0.2.0","description":"Idiomatic TS array, object utils, Option, Result monads","main":"index.js","typings":"index.d.ts","files":["index.js","index.d.ts","all.js","all.d.ts","transform.js","transform.d.ts","array","object","function","option","result"],"scripts":{"build":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./ --declaration --noImplicitAny --strictNullChecks --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.0.2"},"devDependencies":{"typescript":"2.3.2","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"7f9ebadad2fb7b6feb68d6ef90158f110dba3eaa","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.2.0","_shasum":"8b34df60c3ce4d7dd17474afed182613094b80de","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"agl@zengularity.com"},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"dist":{"shasum":"8b34df60c3ce4d7dd17474afed182613094b80de","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.2.0.tgz","integrity":"sha512-+Zm/MTG6ct+gom9CmwXymVjFuHDOj6CZre1rIg89M2yjqUOJkedRKJe+JIImf+0Kw9af6tm4V2J47HNmvQUDqA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDe23g+dQIlPusgbqNj459PEB1IOnbHKR24LJZSAjem6QIhALVSKu42u39oaPrWVLgRcPhZ/H5Mdd5N72iJRM4VUTyD"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/space-lift-0.2.0.tgz_1494860583968_0.4030914241448045"},"directories":{}},"0.3.0":{"name":"space-lift","version":"0.3.0","description":"Idiomatic TS array, object utils, Option, Result monads","main":"index.js","typings":"index.d.ts","files":["index.js","index.d.ts","all.js","all.d.ts","transform.js","transform.d.ts","array","object","function","option","result"],"scripts":{"build":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./ --declaration --noImplicitAny --strictNullChecks --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.0"},"devDependencies":{"typescript":"2.3.2","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"dee5701aa6a6e35ad16e2cb2b318a7db28ce62cf","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.3.0","_shasum":"ff9b13b89c2bc30d47a1c86d2356127d63a68b4a","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"agl@zengularity.com"},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"dist":{"shasum":"ff9b13b89c2bc30d47a1c86d2356127d63a68b4a","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.3.0.tgz","integrity":"sha512-0h9lSsAemj/E8lfIjefc5058X+uoB9YNNlp3QtUqEl9iCz05QsEtwj1CaTUyhjPLK7xgO+OrSbj9SibAGwSxyg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDOeVhK1td6NlIwMSVX8s8MHL54qt8f7UwbgP6HSZ5nSAiBw9OTRqTCjtWddexZKzKkfFgc3LrPTfy3KVOI/iDCvLA=="}]},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.3.0.tgz_1495522197627_0.6987014482729137"},"directories":{}},"0.3.1":{"name":"space-lift","version":"0.3.1","description":"Idiomatic TS array, object utils, Option, Result monads","main":"index.js","typings":"index.d.ts","files":["index.js","index.d.ts","all.js","all.d.ts","transform.js","transform.d.ts","array","object","function","option","result"],"scripts":{"build":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./ --declaration --noImplicitAny --strictNullChecks --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.0"},"devDependencies":{"typescript":"2.4.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"f383b740afe07013450c8a44b9b88b402a19a8c8","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.3.1","_npmVersion":"5.0.3","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-ERGyjtsBkP6/eL23BsJ2QMqxNbaCzn8RNiqvW9FOGGpCpaaMbxah6bfDpWfqYsLyacFsQSKZP6QwYS32hrPHvg==","shasum":"1e3d260e2957015f7e547d162ff93de8ea04bdb7","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.3.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC9tFfTZ7yH2+rD08WWW3mebsHv8iCPKAj21Q0VZvzWoAiBMuhkqPphuORomgPRccI0CfIhbpchF1VYG/zD4Z2ct3A=="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.3.1.tgz_1499082152258_0.2394974366761744"},"directories":{}},"0.4.0":{"name":"space-lift","version":"0.4.0","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.3"},"devDependencies":{"typescript":"2.4.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"42ab4be2d6a381f48aaf7eb393dbf066a4d5cece","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.4.0","_npmVersion":"5.2.0","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-NgK2csL28/fQMZ2p9daQ1KEoINnJiIKZviMmA9dLKpk90fQz9Yz+hwRlLv4TcwYGUGxnX+rrd9jmiF7XF5+THA==","shasum":"d1c7a24c40a5c65d30b672c00124140c72ace21e","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.4.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrU9Nc+7t8zDsrL9nqESFhU13GL9JvwuFKHKj0rWNxmAIhAKW5r/xp1Mq7cjCacksQk1Q5iOsGHpu5yL1LGpbztjpB"}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.4.0.tgz_1501426680790_0.05913753155618906"},"directories":{}},"0.4.1":{"name":"space-lift","version":"0.4.1","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.4"},"devDependencies":{"typescript":"2.4.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"2f5210e8f0d3c872a48f6cc891f1be2c07df11e6","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.4.1","_npmVersion":"5.2.0","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-TJmUDQthX/v+qyHQUAyVefYuJ85ELTj1dwufdzeBTRRuJiGzA5zrg9c3Bd+gNHIqKmKCGVPe4hU2icTmpAteFA==","shasum":"c901322fb9399fa9de028d8208cf3532a505a5f4","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.4.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHIlAVbmrAgbTrkG48Z0TMMRchorWlN1VlzudPjqjpQEAiBVovA5nlT+U9GxfLvdqBUc4Cq/0IfnPKZvaLCxumwTTg=="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.4.1.tgz_1501430582745_0.6808206173591316"},"directories":{}},"0.4.2":{"name":"space-lift","version":"0.4.2","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.4"},"devDependencies":{"typescript":"2.4.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"e050653c91ca98719d9298287faad551abbc4dca","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.4.2","_npmVersion":"5.2.0","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-oP2sr/kchn32owh8zYxV9gMbYbvH9uzGqQGsDosVKYYTDyfOHe11me4VVwnhHD7+ZJiYKLXmwuS+bvNMRa7IHw==","shasum":"ba2a69702e2eec69d6c3fcc1d598d034623f6122","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.4.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE1UV0Ur5+qrL0OSkBWYnUQjrWZEjexq+L6abgH3Iv44AiBs7NCNhooQ5aywqlZFS/Ix5YW1R9vwV4Edtl3K1EU6tQ=="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.4.2.tgz_1502192860995_0.3326240878086537"},"directories":{}},"0.4.3":{"name":"space-lift","version":"0.4.3","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.4"},"devDependencies":{"typescript":"2.4.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"97026ade3638eb7a7c76f1a9c0934b79e6cba81b","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.4.3","_npmVersion":"5.2.0","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-7RezAWclHF6LCQYEjdSIF1ttpS6o9Yb1VcI0bfOhBBBTc0eAyFr8kVcCB7r5zd2A6nTZtm9JROvTdZ0ZsTa2PQ==","shasum":"9e751505796c302dff8d4aa01e8354e6c30ab344","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.4.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIATvHSPqGu9iv7Ozi9e8CkVxNHR01SMQYGCVDH72GGN9AiEAjm6UwayJT1kTryMpDmqJdnQcbXT0dyhaRz6Cm7rBEqs="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.4.3.tgz_1502194935265_0.5669172408524901"},"directories":{}},"0.4.4":{"name":"space-lift","version":"0.4.4","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.4"},"devDependencies":{"typescript":"2.4.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"24996053f9946b84c481291a7ee98be8284985de","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.4.4","_npmVersion":"5.2.0","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-VTUdEkdI9zCNsD8LXk71th3YGIkaLqI7Og0Wq0q2Y/zz0OssHBzfl3HPGOtlj1T4lxai/rZxCoPPJxvCpfmrkA==","shasum":"fc73b6cdc83d2548d09ac57c37c252906df28924","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.4.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1jQlrDNSGtK56JPuPzfwQm4Et6yv7rDV5aPjyLLsuFwIhAKukuXZfEoWcMICYiv0yYLa2RUjorkQ7mOP+vk9GaQSi"}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.4.4.tgz_1503416694634_0.9353014340158552"},"directories":{}},"0.5.0":{"name":"space-lift","version":"0.5.0","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.4"},"devDependencies":{"typescript":"2.4.2","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"ea93d69394eb6437e6943614bf5737b73f8db780","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.5.0","_npmVersion":"5.2.0","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-lYvmof1WpTLBtVyUUfvCbP7kO1PAZ8+V2wfjCRpzkAmr8YIvhwgZcKLsk+8GjGKtFz9MyQQWG4kUbf60H1y0lw==","shasum":"fe293b9644440778e14e1ba2ac0880a3046ac2f7","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.5.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIX/hkrFZisEkpyldnPMlV+fLGqtHeOxQ1lgaL1UIGKQIhAIxQiOPGNAj09CEGl8x6TiuVMei+r56ecp5TvS8BJQ6y"}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.5.0.tgz_1503601095315_0.06920798728242517"},"directories":{}},"0.5.1":{"name":"space-lift","version":"0.5.1","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.4"},"devDependencies":{"typescript":"2.4.2","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"fb18650efc7ad61d55dfe8c06f36d062fad8668b","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.5.1","_npmVersion":"5.2.0","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-mEuq/bvsVvMYpPc0OXDiRBPPJsGQAiU1JZQbR1cE3HV+M1UdGGZW6RTiYZIvpDQW/byYKERSWw5b6Z0yvuVTWQ==","shasum":"75e1f78537ce3f320a157d49e0476aefb7fd9e2e","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.5.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBwEyI2YVImgfO0iqMyPDlx65o3j679oOeRiOkLc1pSuAiEAhrXye7LeMyn/J6cI3XFsgsj9sqr89EwELUXZHx1rbAA="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.5.1.tgz_1505644065682_0.3215917218476534"},"directories":{}},"0.6.0":{"name":"space-lift","version":"0.6.0","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.4"},"devDependencies":{"typescript":"2.5.3","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"fa6342a7fb15f16e2ba086f5042420c299092e2a","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.6.0","_npmVersion":"5.2.0","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-7d6gw9FZfWSBfbL21eYt/2JONCzQAGoDGzBKveqs0tuW14CbCQUZgtsnU/BiQS6YzLyXSW0XFuLLXMyHV6nfdw==","shasum":"6e5c8fc3930526a4e47f7a7c1452b46e62a481e6","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.6.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEqDgnLNvPmpBY+1p8wzhgdqmn15nj+VVLQSkHNJuVKRAiEAquG6gqYZ9uDhNJPNPB9LI9lRKFPDwOXfkcO/o6ts1fY="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.6.0.tgz_1508532701154_0.5307991362642497"},"directories":{}},"0.6.1":{"name":"space-lift","version":"0.6.1","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.4"},"devDependencies":{"typescript":"2.5.3","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"29dcb6fdb83a044105dfcca2e79fa81651359b7e","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.6.1","_npmVersion":"5.2.0","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-kb/21FvFbQjxwjeSmp61BcyO3JfhJxww3Djr5Y9QEoZqQ/DtDcKIjnnhfRZyrUWYujk9+GKQUaHtxr4+0rSNhA==","shasum":"22caa3e789d8846d5f420fd79c07a9295769e073","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.6.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC/B+ZrgDm1BHGGfoEhYZLT9zgrc52kIVRfHLsdvOw7WAiEA9/cyOqwURNXZH/lSh+BTRDoUlDYa7slW5Z1EXiCuHtE="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.6.1.tgz_1508776120389_0.818075739312917"},"directories":{}},"0.6.2":{"name":"space-lift","version":"0.6.2","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.5"},"devDependencies":{"typescript":"2.5.3","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"dcd113d7463be0a171468aa4cd5607e9e0bf53cc","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.6.2","_npmVersion":"5.2.0","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-zRfxw3ceSTdilgS0DRD0ATJotUspVQn56R1Kb1JlDqRBWAHpSA2tfsWmxDZ2of8JVm8FRMJ2z1TPT7P+ATLWmw==","shasum":"23d3705bfb4068ddcb57ce869a2316dce62173ab","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.6.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE5E07rsXShdyk0Hxr9Yb6CbTtyIWGXo5CR4Rv+G0v8sAiEAuJ0u+lzaeFmbivtyM1r4Cy7DsGxloOfk3tvnNpxMlIs="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.6.2.tgz_1509023648907_0.8770199462305754"},"directories":{}},"0.6.3":{"name":"space-lift","version":"0.6.3","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.5"},"devDependencies":{"typescript":"2.5.3","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"2c8570d3505df50ffc9fd16ef914de0d5303dd4a","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.6.3","_npmVersion":"5.2.0","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-p2GwY7fSZGJ8WYnIFS1EnLC391xmlyeUlW47JeGJi1Q6X1RPsCNec4hqk08zP86hA+gI7yTzotjlgwNXscyx3g==","shasum":"1541bf19ce3de341b7817256e81265a3313f9700","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.6.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPsquruwilahoTncjbuzYL8HRIO0BzYTupor+lmjwOCQIgZeOd/ISe2sf3Mv+8DzKrJBQzrEBdBzmIjVTRDzdScQQ="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.6.3.tgz_1510049036609_0.49061584495939314"},"directories":{}},"0.6.4":{"name":"space-lift","version":"0.6.4","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.6"},"devDependencies":{"typescript":"2.6.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"f7cdfb90b90390c6b1de7076308c3085bf258eb4","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.6.4","_npmVersion":"5.2.0","_nodeVersion":"6.3.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-2Yc3ULHvnPpPon5gXJv2DwJhwu7KQHot/X9Dxd2jf3lRCJAjlMOo0uynVOJncnoZc3hBU/t25Kir3I0i/evVOA==","shasum":"a1bd9fdcafb70416f4f55fac7a6adb7d37e2d782","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.6.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIAMrTTSr6OJGAamvKeshUWeNC2Y2UsEOW9M1s7V81oQIhANKTlkGZbn/xPlBvYAuiHiw697j2i0fiYR8Mu+2SAkek"}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift-0.6.4.tgz_1510928700097_0.1688966399524361"},"directories":{}},"0.6.5":{"name":"space-lift","version":"0.6.5","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.6"},"devDependencies":{"typescript":"2.6.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"08884c78bc65a7642faa8a0f9cee6025419bd5b0","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.6.5","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-ViGFtEm6wiGnSMBJbHHpvRuNB6zI+lJcPyaXMfwIfqw0hHZ/DBE9vYF+v2lwtneur17K4JaDwwiq9IUww0HJ0w==","shasum":"9852a55077c7ca4dd243e460ae1f9ef403a40336","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.6.5.tgz","fileCount":223,"unpackedSize":173295,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICS5LaeSVv0r7Q5lS5Ur83G/Z/vYX2zZklL7GkeT1hS2AiAjy/cRUvuB9Qs7rvbEgILO37Inho6oEHSiHm1q7puKkQ=="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_0.6.5_1519665598650_0.08057210594751707"},"_hasShrinkwrap":false},"0.7.0":{"name":"space-lift","version":"0.7.0","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.6"},"devDependencies":{"typescript":"2.6.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"8c80ef7254dda075501a69528d5a9f90ea92194c","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.7.0","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-KQfXHsIgk3L9zg6JMg3pKDX528FRQ0afKW2MJZetLVoHZbzIIw0xRCt20b/XetBSPjL2hUaDTrBFkw0sKlqOLg==","shasum":"bbea52e281fbf62c544d08007821ce44e5ca769c","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.7.0.tgz","fileCount":223,"unpackedSize":159870,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoS+OYGptUPifCsatp+V17DRC25VobDQcSzwWewNWhXQIgW7WbUFZTzay0yziCttYKK9h/TQe4gAolN38yTFpAr3U="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_0.7.0_1521194813284_0.4606722065959017"},"_hasShrinkwrap":false},"0.7.1":{"name":"space-lift","version":"0.7.1","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.6"},"devDependencies":{"typescript":"2.8.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"a6c42e0c0106a8355e2a8b5bfc0aecc6f75d8025","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.7.1","_npmVersion":"5.6.0","_nodeVersion":"8.11.1","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-beAQ9yfuLdqMbDqBV60mDZHesWoqYtb3ZbCH1YX3ogbNT2aglMbllwQZvXtC6gjvvyTnEPoQcNyPRHDfeHU17g==","shasum":"4c64e7c7dd998cee0a427d96455ecec31469c4bd","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.7.1.tgz","fileCount":223,"unpackedSize":159976,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSvkXZuVjjbPRrA1GHMHGOwOP1uri89zjA4rm99BBcJgIgWFhUz0EQJsii3cH6L/WXRlYdc40+ITA4WocvRGGFIAw="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_0.7.1_1522923572407_0.06737543182951677"},"_hasShrinkwrap":false},"0.7.2":{"name":"space-lift","version":"0.7.2","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.1.6"},"devDependencies":{"typescript":"2.8.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"546a302de05ab60bdc5e0593d3ffdaff93d329ea","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.7.2","_npmVersion":"5.6.0","_nodeVersion":"8.11.2","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-BVW35LEKCUx17QBQ75Yv2OCM6LpW1Op3XJwpVL+7LzvG7Se4EvdGA7yGI/iV1jviMKsxlwFiTnwOvCUxKHYKYQ==","shasum":"c314b653224ed72c44cc45eecd162368429cd9cc","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.7.2.tgz","fileCount":223,"unpackedSize":161072,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBofRCRA9TVsSAnZWagAA4iQQAJU5p91IC2sraLBMAE/q\nDrr7O6OsCusKa8pVOo0EoAXi5XDNq7B4n8jzEhgTURGHuh9Y5Q+4QqfIkAmQ\nXg+sb5dT2GJAM9EsDnIkT6pTCzmCMlAJo0M5ImqoNV/0iGvX553jS1jD9SSB\nOk2Nx6KmMPYTbJSePogbdlrPr74N4Ztc7vAQwssTzZFR1jz2IrjsdRpM/CO8\nLczkXlo4JGAqlCu1w3Y2x1Pxlp7Tbdui3jGIgSkdpPj8EmYVl+wGHxzVgbkf\n+2UZuNULRAKcYldxtUpTjc+CR5FMlBARgdPmGsoV9RyRnw2JHq21FAkXvu6F\nQ4CqgTip+MXTB0a+20uS+JDla1CskTNiuQLCnTFXd5mRJK8zV0amuJi14KRW\nVMm2rPMQIIkH2fu0ORUAKi7pmp4sabHRYNIl0J36uEZZQ6tQJ1ckaf1lcGET\nXM543NykISrqbhBikIBlJ2P9pey3gK2RMrW7saGWeNgwBPksByF1FLs8g7Hp\nML4UfabtLoO9OQQO7xj+8rceh2wKdqfBSWSsEJwpqfYglaaMiQFJjnMEjAgg\nU62DAizCA9+qyalnxZO+BfFB9r4Ex94RZ07izaDuNNvUdz7+TZOzUaJ+Ogjb\nRKxqxB530UUNcLzz0svloCkkjEeBiB3vDaUgKu5h8+OEfIW7MriIfeDmkijP\nvFLJ\r\n=hikq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8bFx/idM3WxCmfOhplu/cvbu0fCX2oPVvRSzvfUkW/wIgJU1qRz+t3DxS3/LKRoQxwDha+S9Kl8nR2ILf56+RSbo="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_0.7.2_1527154640744_0.9860028330182817"},"_hasShrinkwrap":false},"0.8.0":{"name":"space-lift","version":"0.8.0","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","files":["es","commonjs","wrapper.d.ts"],"scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.2.0"},"devDependencies":{"typescript":"2.9.2","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"fe4ea6f90bba70c60eda49ae963fc62d11cb0c53","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.8.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.3","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-XM7o+qUskf1WrLM0FhGgqhkFvl5AlI71wpb86MlxfFzAoHpWKKVJuaicqJN+OlrXsAjjMJzvfOdOXlNSm/TWJA==","shasum":"64a0e14bca7b251023b93f0f2d05797ffddb9500","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.8.0.tgz","fileCount":223,"unpackedSize":162535,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWKG5CRA9TVsSAnZWagAABQgP/RgZ8ouXluQTODDemI/W\nGrXHLWjbREBAHn7lhms6zeYf0ccuRv19WIuJvKK1H+tq70quE0q/TBg3/90c\nqhbiEPOcnPELpgwgmguGjZmQkaCp/sLggoQXdjXYAygDMB8bdFPadCoW91tZ\nHYaMPkuIdy3jW2OCzcKf/5dYNc0/tgmzsJA5E+oU4eQS4EgqAv0/ZkDQwhWV\nxEKIcl3euzJrZEQTSqQ9MM7Yjy+0kspy5eWZOnqalYHjottcXXolq1p7arTz\nx7tuGy4zvepzZL9sG2idwAySTliG6etdhUC8enjxZOR9FhMxRcrqi3FZHr4r\nUxFEqqD4TWHVTYM7uK4vKBGZUhj93bBIaBOFey4W8ANq8xIb1c1oD9hMbBwp\nS+rdWuERno2aelyxlO1ymWatCFgTkVH/NwsAeaCwF8PVkfPB211a2/iNHgE/\nJeRcSBpl1HZGlidgSE09zU51L52NXRCoXjQ+aoXpe9cRVzYorXdXTtPO/fay\noEqir4SnLHFzq0n1jxeptlOyi4Vc+wFGsqdEwCjS3cSYm99iZkJ+lWEtMteQ\nHsV7ncI6kN64GFJgTic6536yaQoJKI7TbeqsVuhJIxlpDGU7TePWyiNCAoUZ\ny1etj7ObQBbLzY7tI5lP7aoOCt3eeYMHvHeRnY/YV5+gDcSqJe5VHo4idkLZ\nNZrv\r\n=lbTp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXF9y94Y8oIYPtGY9N+HQkJqOtRsjigZ4aDuDrE7AymgIgWXDhwEhSYuP5nsp/5ZukjYHeFKbcwgLZpQ9OmFL+txw="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_0.8.0_1532535225513_0.8426016860288659"},"_hasShrinkwrap":false},"0.8.1":{"name":"space-lift","version":"0.8.1","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.2.3"},"devDependencies":{"typescript":"3.1.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"24af7360b161aec8388a77f80c6cb9f340354816","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.8.1","_npmVersion":"6.2.0","_nodeVersion":"10.7.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-zk2J7wxPelcWd1n+XGhW93ZaAKfDLBlH7h2jmTVHYo+owK4Tq5dQZctengCWyfEYmsN0Pfmf7RBBNuxFMnuiTw==","shasum":"82a7d50239969696467931bc60502c7acd7afd53","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.8.1.tgz","fileCount":223,"unpackedSize":163290,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbu6drCRA9TVsSAnZWagAA2SgP/2Sy5kT32fvYg3Bh0zrh\n6tdJGu6HFxz705O96KE04P0KFCnucUjqS+SUFbupSES+lF3JO3KqAqUIxHy1\nzlYmuQSOz1UEWMFsyTgLagRRxcVUKjLliMtD5T06k77W+ldvxaUyRW/i6Vu4\nSx3c2D8ODdW/jwhl/e01M5o0nYtBTrqV16avATQXhhh9yamWJn1C7O9zLBJ9\nVG/s+QofHdmTHG1Fm2AfzbxYo7lF0hMj30clBovBxa+AsF64/73gbEgGz3tS\nstsMlhwgOeD3sSSh1J5K5L/xVzRGw0KCRCqVPhNASmLu7b42lVzycqCiHmSs\nX4O3AN92kS4iNKWV/4lFTAlL2Z1SEvuWQW0w+uOGMrkgOCAOddGETMFmh8N5\nmVuTGBA9sJAnG3tcQRhWhthepeppUE81GMaXWIGr100je2UsLnOQSi9WT6lN\nWx9shSC1KjlaLtatlvML1fWDy0MMItQ+NP/lXps98wwGXWBfgAWjXTa7TMO2\n0R6IxrlgAHrU8HcCac0wx+CPK3sb3FsOC6Pwn6VWKINVVSewGUDfEUDbWMdw\n2kIDpmbCPFNTdWlgRLHhZGt/JK6AGqIDgiyE/6/9agnC5M1R5AUhg966k/D2\nRGLH5G5wQyYobb1fyxnnl4gOh/QxvY4C2XaSX7gk05rzh4Dh+qbLGItw/XNs\nG5iS\r\n=CN/7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFPkPThFfsf0WUU4+IKR9+PONq/41Ben1M5ToFgYG6n+AiAkZbT9TUPJZafMrSm+vHwfwDQblFyUVRa48+V20SkQLg=="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_0.8.1_1539024746047_0.4318317672640224"},"_hasShrinkwrap":false},"0.8.2":{"name":"space-lift","version":"0.8.2","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.2.3"},"devDependencies":{"typescript":"3.1.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"c40f34754b5f520aaa1ca900a6b6eab0bb08164e","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.8.2","_npmVersion":"6.2.0","_nodeVersion":"10.7.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-qFgMU/joApGgzvnb3gXZNj0/WPUO6UsdknwsxTug2CyrqC7ANi/u51xjTJtzNjYT1Z+WuB1gjEfeMMdaF1o6KA==","shasum":"eb1f81e39e4a55de700147af2806359779299d1d","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.8.2.tgz","fileCount":223,"unpackedSize":163518,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbwxPjCRA9TVsSAnZWagAAvT4QAIHnaNKV2XiMIXcSpkbB\nBVECejB9okriZcnYGnGyPn54kJ9w3YEVEjYOEH83oQgjscVLS/4bk3ZpqJjx\nQ+sFCaQshVC6dA4LpYJfxVNXM/Bt/LWsUhhzLvHiElDn6PdTZuCAODLiMDXb\nLF3Up9t9HxE64GDAQcxQ7EPdogdaHOZNc52ZaaLt6V4U+0+EdZqwZszf3OOq\nS9ZXUbvR2kf6DVSda83yBMgHtfx7fpx3G1F3M+ce3jdBgHQ6nslz4OjN67nY\nFHNrSIPebssaBcFnrxnvLYxeohiSjpCu1RKgks+JP2Fq0o95OuWxMkM92BUv\nZpdoC07ArQakG30/Uba7TELdT8/IlAWZpCB7O/YMs1zSRfofGFxgdV4Q8/5c\nMpts2eGg+mi82e+XWL1614OPqgbmq38uYy/oYTx3pHIkmELLQHe0bYA5wHlw\naIyYcduyhY3UMxGZJ/+5eYFQ2rNQPy6mKF0OkmyOfqM9FiD6gjmiwdAqF4GM\nC+Mlkaeo9c8Pc5uNcn8XvqK8uNeB7TqIXxgaWFIPNeh/iQ7xGYI7rAEAHqBu\nCOUYFQhcFUrT4I/GG4TwiGtnqTCXuvZYADdd3DDw3vfnqWcLitJU9qUd0TKT\nM2qgUedeOWtMAevuXItPRJXA2kQjv3jMbMczMb6hvmPHPi+5JQ1TYIihdvb9\nAelT\r\n=hJLh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbhNceySjPcLhSQeHCx3IoHwmcWbq/aKctXsIBNg/jggIhAOijHvvh+rYNOiCsaDXUFn45+Az46o9/R7PepiuBUKsF"}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_0.8.2_1539511267017_0.7047764607276463"},"_hasShrinkwrap":false},"0.8.3":{"name":"space-lift","version":"0.8.3","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.3.0"},"devDependencies":{"typescript":"3.1.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"47b03fcf661004247e39c8edc79aff43524c9a20","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.8.3","_npmVersion":"6.2.0","_nodeVersion":"10.7.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-dO1AQugZyFUua6mgpcqkWUzIksltY/5zAWSshNWdKRV87tYzOoF1Vbsi2iqn+DMOK2F37f6D3kbN8/1tCyM6eQ==","shasum":"6c4c39da17b1ef99bfc765471642e68579f7481d","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.8.3.tgz","fileCount":223,"unpackedSize":163518,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbw5rTCRA9TVsSAnZWagAAtw8P/16eq9EAhVxtPNmw670h\nU6smH3x7quxfxhSublRMQ84mTjlXu5eKB6kkOF43BU2y0ODCnKWtg5WMkQqF\nfutQE32GxBNVEsMeDPbJlw0F0oMEZbEM4G6q3mEnFUWrJUCi7iP6SX5NMk9v\nzrblo2L1YMUbEXTaREZyY5dg16FkTjKAXwiuD304V7l13wyH7WaheH9Z4DXW\nqYzHQMtjJCubsSCzOcHdCN661zgsu7kHm8rwkml9LoXQuo6+WtpRzf8wrKdV\njxUXFLqvL25ZYux4PU6pboOhJF7CbZntwsrIkzo40ZtfAakUBa5AdsATEfAa\n7d7uepUqDN7VaK8oN7WHBBAxAsYIeEn+Ad564mkHO2BnIbvCXGdG2agq3ff9\nKQJnz5rw2/8NfC++cw2KJYFU5552acQ4D9XdLuCFjL2PNVoKNWDXnXhWuPt3\n1PuGL4MC0UVtzoZMiIiHEO8KX/ssbOCOzaP+EDQLgIPGf9pdaBe9uYhmRTYD\nMgtwdks6GYrdQl6LtQO7DaOR9Dh2xCUajGGoA7BRe2gqSTwnPLx/zJOaA9CZ\n5HoJWCoGbQ+MB4Ftw5qyaHhToN99Vz118NQz3F2ga3A6GnRFn27220HJDThJ\njclk86of26En+KYWgLGAcYOfevzlgoNqWu67SFy8euOthUOmBp8JnmzZ43X0\nSq9E\r\n=MZzM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID++tMKf7mXgHCPEa44J14ZUz1I9oH4/uMTtWSsa6IYyAiEAlV4K0YKo4O6rCUwoH+Q+NqjUXDFXb7aV4RM0nPnXM6Y="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_0.8.3_1539545810389_0.47646619715078287"},"_hasShrinkwrap":false},"0.8.4":{"name":"space-lift","version":"0.8.4","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.3.0"},"devDependencies":{"typescript":"3.1.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"c8cbe41d35044b1f809f422833e40dcfda1ead7c","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.8.4","_npmVersion":"6.2.0","_nodeVersion":"10.7.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-7OHzWppxsI/JcicbFcEhB9zB55qb7AntWzx9ZhdaOZWJmm93bRMIqNBX0kvO5hiYZgMB7/wzp5uX0w4npV1W0Q==","shasum":"d9c8b6d63b16eac476ce5b3969b68948d174844d","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.8.4.tgz","fileCount":223,"unpackedSize":164218,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0K7+CRA9TVsSAnZWagAAQE8P/jPtoDZ+CtRLpzMtpaSQ\n6sP0zZGySVqUmsEhIhlzVHA08KuCwdFIhRAknFL1a1M0F8VxXEfbBCjstmB7\nIqUfKSu9diEZ9YLQaAx6utYAdTVYI8i+3PjvbWtg0ZcVDLf4SX7ysv619ctZ\ncfJwBckeMGrCTwJJYAYqtM3no+pLuwtUZYbfO1ZU/tiL2K/pRxQazfJKZ99K\n/zULdFkgPGXn5qFXrUIaEcfz07s9IyCaQtPzR2bFQFpkfUsITZTXpHV9u04A\n3nlORrPWwn04UTs3h/istV9Ol8v1aIKLBh2JRgKCULDhe2vzPS57jh96B36b\nuGF0z6NXoahsSljMxbIiBp7gqrcAoET7ZZ044QEaPmnO3u6/7PRH84Px6J1y\ngFV10guA5JP4mvonkv7lTx5hSiL+rHwNUFTTUg8QCpwn9+2301XihGJwCFTJ\nAZTlO26tInRQMUNbWREqJdsfCL99L4yAQF/8WGKqUoKjBa8Od/VFx2lPQ1U6\neUnobWndBDziO8BiXQ6Cscopuawe7OOl/xAMPNBBWsGQO6YU1QosPsBt7CGx\nz5OLPdLLVCh1VI2Zr3woktj2RN4teAWjU9eajHhd3Ih5baoOC0buHMzqIOlH\nUwqWDhdYXgEDijuVPr0GgFp5b7TpWgvPM3cOER7MBs00yIjHdVk5O63vjgpv\n6W8n\r\n=xTli\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYGLder+nEd5TIfcZzeak1jijzDr+7mFLeAsOesvOrYgIhAL1nw9/bs6YAJqJqzfCidIc7RtvVF3H0q/Io45RwkIq1"}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_0.8.4_1540402941755_0.39429218353246287"},"_hasShrinkwrap":false},"0.8.5":{"name":"space-lift","version":"0.8.5","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","pretest":"npm run build && tsc --lib 'es5,es2015.core,es2015.iterable' test/expect.d.ts test/mocha.d.ts test/global.d.ts test/test.ts test/option.ts test/result.ts --outDir ./test --noImplicitAny --strictNullChecks --downlevelIteration","test":"mocha test/test.js && mocha --ui tdd test/option.js && mocha --ui tdd test/result.js","prepublish":"npm run build"},"dependencies":{"immupdate":"1.3.0"},"devDependencies":{"typescript":"3.1.1","mocha":"3.0.2","expect":"1.8.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"gitHead":"34914c7ad5344ef3c22a6f825930b21adf076a2b","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.8.5","_npmVersion":"6.2.0","_nodeVersion":"10.7.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-gSYoUYMDIiTcSkFdiQ2vyALUErnK7xycRPkwX0EZ0sg1e+/Zd+hGa6gvBSQNkldSUaeYi26nZ0FaLNf7gKNjkQ==","shasum":"cf035d0bb4597f05b88ee5ef43266db30f7c0c7e","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.8.5.tgz","fileCount":227,"unpackedSize":168497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb314ICRA9TVsSAnZWagAAQ3AP/1ZMOrbfftMVW6vEso+k\njxlaZo3J6nBJbOr042UzGzlE4jxmaGDYbx+104vRzxs0BrEPz80cLf5/YcPB\n4xwuG4D86a4KKphxhJ+G8GfCAuOp/W4Tyu8NMXj6CTki+zHK8EgNot9SQs49\n6yQ6HS7ItJ4lSS+uyYKdA9CnPMsRYGa+Ln/0RYkI+KG3FUHcNV7Nv1ez+8N+\nIL3fsIz6aNgMA7fIk2J+GbgvzWzdhF4i3KO5VjM38MSposVlvBVeAxPeySH/\nxD9+Fe36lzB2EszqtfZoPlDew6OfoJtWJXFaAMYH4oGgWYLLkzBi1xqPAQNi\nTq5l/jkv9HtiSRjRiEX2GwV2s18Li4xhF7ejCzTdxnUUTqWrUGnvSZoiYYW2\nwN/D869TdBnCEhWtekP69YOxwajMeYsQ23I4RR8GG2DmvJq1ycnRCoQHtdl5\n0wQG4Z0mloHj+DGx1X5uIcNo8hbHMESn0BFDXrcRf7bQRGVrCycQrkjvClQA\nN4K2zwcdmOC5GJTTsF7u1s8Sv3RE6S4WOpbKdxiGw4gBIOa9pNXCyY5c/KKe\nWg7NEH/0J/R8AKOLO4bu+q2KiDk2ZXzQMmfzEhpwRm58C6/0Cm6E8AcIy6vL\nWYtLudH2eeXuy+xPqJBzYVJCI6yOgC3K0O7bLZEl2vKFVNM09J841/xRDTP+\nrl6E\r\n=TYZh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBfjIn9H2ZLr8Nh75Ff7Li4mdskGRX1LPy6fsR62BJxTAiEAviiWd42vPlFMsODJFdLj71ZfxsIsUjx0f/rMYNmlr8Q="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_0.8.5_1541365254912_0.8234215449566378"},"_hasShrinkwrap":false},"0.8.6":{"name":"space-lift","version":"0.8.6","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","test":"jest","watch-test":"jest --watch","prepublish":"npm run build"},"dependencies":{"immupdate":"1.3.0"},"devDependencies":{"typescript":"3.1.1","jest":"23.6.0","ts-jest":"23.10.4","@types/jest":"23.3.9","@types/node":"10.12.9"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"gitHead":"db8745b7224eecb1caabda0671389a8e94dec026","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.8.6","_npmVersion":"6.2.0","_nodeVersion":"10.7.0","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-H/ZgstymifwYeHhdM1UAw8OkzyaeGPqRD1RqAKueccT7aZkyhjC4P/3YHrH9bHqSsbuwET+iBMU96j70DZbIhQ==","shasum":"346d894b59ff26fcaaa74efb48fb2b8547d8c8e5","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.8.6.tgz","fileCount":235,"unpackedSize":178324,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/JNMCRA9TVsSAnZWagAA/igP/2ab6YP4eObi/1hO1+Gm\nHlCrJJjHtwuRTmtubJGn5Dz0+J27SnWZAS9RPyJKgRaGPHLxhNtYb2NgQDiS\ntT/7wpHkiQOFstV+6efLqHQv3eHzJ/EuemcXXHLCpo6ic/Hki4oqtEp9RYHq\n38ZAfHH4exz7oaku8TOVm3r2D98ScWvpsf0mulCi7s3oq0dlPC5q6AjYN+Cy\n4GFeq0/EqADtzHjC+u8eM0FBeW3ZKUXPX/84XiDxHkVuikgtJKl/EIy1v1j0\nIyvJAO2VWNaFDtk2wH5dCxMdpzgReJTVsPm5UoZXI+ODdFRis79XtOUgXabh\nxQndtDGPU6g6lzcBB2MPJu8d/dwZyFJWM1G7WEn/WHPiNqQnFYLzpGu8XCT9\noWxnroyClukIat4CTewucfSOx9wVJ1WnSP3m2QKlVu4l17CjcmaJtL/p5ie2\nagiQb+AUeoZXLnVNAeZwgMVV/7S6fx4UY7vkxHlTmk8100cI9ZqDDCp8ECnB\nZfO/xavEsS4fv/zrp3AEWkclXszQS5fDAqc83Z/oqRMW8j3Vu/EpOUwbDwF6\nTz/0KxJ5wYkJ5rTIPoj3AwJm4N9uNHGSUL4ce/RgULp8MBShH0EL3qqQsaTL\nMADJCfclcM451O3TWk3lJc5iSCPTXDZpW2/wztt8lph+xdpYgEZgmeVb2bAk\nswjg\r\n=/Sfn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/d7xQvJJCP+8kRVcfMFvWO+2/dPnanYJYCDHxMeYcDgIgRdiHRYv8HO/nPhePbEJpMc0Yv1lwKLa8+1XaTQDGTLs="}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_0.8.6_1543279436036_0.7745546456485366"},"_hasShrinkwrap":false},"0.8.7":{"name":"space-lift","version":"0.8.7","description":"Idiomatic TS array, object utils, Option, Result monads","main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/**/*.ts src/*.ts --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors","test":"jest","watch-test":"jest --watch","prepublish":"npm run build"},"dependencies":{"immupdate":"1.3.0"},"devDependencies":{"typescript":"3.1.1","jest":"23.6.0","ts-jest":"23.10.4","@types/jest":"23.3.9","@types/node":"10.12.9"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["typescript","ts","TS","std lib","collection","underscore","monad","option","maybe","result"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"gitHead":"d2c0277061981d9ce30d617557f501acac82dd89","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@0.8.7","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"dist":{"integrity":"sha512-wDNqtaZvD+jsgjypK1JF7o6Am1gqLiw7N0eetSfYTptZzT2S84E7xgfWgg2h87ZGN8YzlpflL5c1zzzRgJ4RGg==","shasum":"1d0e95332c85c7cea8652cc764db9f2e9139d355","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-0.8.7.tgz","fileCount":235,"unpackedSize":178531,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCSgqCRA9TVsSAnZWagAAg14P/0+dnOC8sXbZg4GgXgMZ\nfXRvZJ29lYfmYn0CSAgdz2NZpmEZ1+Vm/0bOALfJqIH+N7tGN0FDgVi9meZh\n/dEfwFzLK/3f3Hv9IVFfPvSsc7l/Rjxg04R89GHNzqoNh4wOBi2onfuNawQh\nBHiN++U1WiVjUF2LmFLvWRYrKkOFXRrb1vZJxszdjKT0/X8YTe5MDT29F1Ch\nXUgSoyIliXNzLSHJ4YVkOOgXpb00Pgg9zWAJzm4ZBPE4/JKMbG1V2BsZ6T9F\nJxhbCV+6CrrO/ncrKPmjnFeRTRShW9xqm81Wr6XIOXVjuXFS2AXOz66qkUny\nM8IsV7CMC69vlWJqmRuW35KK85LOEWjQAxSycB+Jb4+YNgOKHca2lws74r09\n2u3B+0rEiSXxHvv7ZNdI50W78repE/6km+71TL9XrmYgzR6EglmWj5VAsar1\nzvp9ZVL85+NDTBQDpTOEU58EqIOXPpeBYTGXjAe80i9G3kwS+M/1bab6yEjA\n6sXReX2pFF+ZStucsjJ1Uq9TaCqQ7V27FNv/Kx9ODZdsOOagkUSJMBpUQ5z5\n2+k25q8GRzb2R6ERQfjMJNuWl6fqjn3VJAGv7fdn7lP9JmaD9/ArymX4ol29\n6EJCOtWvH9MmAJO00sdUZORA8fVVkjgf2FTUhLX5em6pxHBDvGcmgdiwJ6s5\nJDb5\r\n=zh4a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzYRqJOrPpP/2pQ9WAjYFMLhmVBw+BcEk5Hr4/sKiNXQIhAJuLC/wj4gfcdTZOGIjJdicgU1RicQcwclrbTLKD+gQp"}]},"maintainers":[{"name":"boubiyeah","email":"agl@zengularity.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_0.8.7_1544103976873_0.8681242971409853"},"_hasShrinkwrap":false},"1.0.0-beta.0":{"name":"space-lift","version":"1.0.0-beta.0","description":"Idiomatic Typescript Array, Object, Map, Set, Union, Enum utils","sideEffects":false,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test":"jest && node test/testCompilationErrors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"0ba7821772c4205dba290d49ee5dd04faa825cf4","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.0","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-O2IoXi06qjYgFkbr5ls2cB2C7+N9dVRQoM70qDAuig9ax4YK3vjNP0xni4XblvehO1fWLLz+Lu18mRZvlZxBbA==","shasum":"788c3765fce1a9de3fd26d796bdaf8302ee0c1ee","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.0.tgz","fileCount":262,"unpackedSize":243269,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnrmnCRA9TVsSAnZWagAA9l0P/RRY5HRq5KPffz8nV/j4\nAM1bouex0+R1ypkLWHR2x7LwLPUjnVa6NFXNL73ywwPYlDqziZtWZxoG3vP3\naUvB/eBR+HMs3f3ceVVGCvPj0RtruUbLnhOs5w9sw2YC2G7UPvOISNgNtqxu\n1A7ACXzQF37q3L2baJh5N8fOFYTiAI7DlCK0RtXEG6THXd43jxLcw2xjYExN\nYAWsT7yP/+ndd05PP1gBKgv6S0uXbva97yL/AWEBzHXuo2hWEtvIAVzyJD8X\n+Q+Ewo1R2OMWaWqh+mZlcelExvOVkgPz9Iex5MKwFrxbCO9BEkwsbcshp1c6\neGvRzAqGpjC0frMN5l/5Dez0nlUw1xZsFU4vVe3jD50ncFbZJVpRInWYN/Im\nZ8yUuHDoip1Jfm628C2YpKWTbR3Wy/IiD1xNSr5IJd2e65NVBhyUmbAatCb0\n7mftJtH5tb5f89ry4nFgPCkiTHyj+xzHPh4O/HaQfBjkQ+nv8wkqhjCpdSW5\nVUI4y2JKHg2cH+uMLFEHXhRhs+r3e0w38s7Ax71UPaoGJNZRdQmG3VAUBBNG\nyN0rk9KvRvqKTicPMy8g5C8TTZ0xDykeaQaSV1+IEUaDAUx+qVfRI1Spi69W\nvY3U8ONne3g+l/sUH5GHokkxVIv0iIzdKV9iM1YyCAm2hOhn0QmRQ9eYZvXv\n9FKQ\r\n=EFyH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKcYR819XKtVaD7LKh+UL1gpqjvx3gfpjvGeNu7giACgIgSi7ACF1I9QyB+xShhELW/Eo/nKbORVfO3dRNrLpItQU="}]},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.0_1604237735312_0.8112026888655306"},"_hasShrinkwrap":false},"1.0.0-beta.1":{"name":"space-lift","version":"1.0.0-beta.1","description":"Idiomatic Typescript Array, Object, Map, Set, Union, Enum utils","sideEffects":false,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test":"jest && node test/testCompilationErrors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"cf19dd6de8ce22d69bac4b232f8cfe59d85f8412","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.1","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qAYdEGGpyG3rfFQmUs3LKqMQI2vLQJ6WRwKdzw2XjLg70/5LxsfQkqkOYACtuvlDYAqdPOyeVeuor7LLPBolUg==","shasum":"dc4dd602dd6aabf88371eaa35bf71a43cf24e88d","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.1.tgz","fileCount":262,"unpackedSize":242993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnr2+CRA9TVsSAnZWagAA6IUQAJnJk9IpwvH79HTKCveW\ntHNvLMPtmyjQQpsO7my0FFIqQfxuR8wV00RcgBBgWXXQXeAN+WucE7TA3ItZ\nOMwJW4lg6Ffk4vKmBOsLwSVdgnr3x5VykxkSTLPkLWzeFjcouWJ9jz2OhP8g\nBG7I+E+a7txMic1Neq72XAwSVqL+jHAaVlUKBRs/uj4T9yY38KP8Ieu+9eqe\nU7C0WKmjPSx3Fol+QtfW0zDM4zBzCgrFYjSXW/sr/qPWC5qRZ49/9bd35wv+\nlcj6419iqAAY14y0lstvq8e4a4TO3SuPgFNgCkMjEifl+kf4fxWXe5Ok0rqE\nu8glJOvA+Lib8vCEPs0OL5EtYqLmkCilTp3EMiAkLx4/n/L+4x8ZnRT1+l0d\nEWNTEyFsR0N8wcpVSD7XwCo9UlmCwyeiZxBL75UtLFCH2LDGJor3Lb8Lq+Wm\nDudYhxD/cqJi9CDjbPVhYSdeLwt3pnLgDSjXvPTF2bSz71ddO8NmWabaTN+g\nTDeCh3972VyfKBHyWc0+AiHRtmMDqVJ4o5YRcK78rai4grKY1uU99chSICcI\ntCd2vJkDt+ehZTmP9euv3xx8rn0ywq5M2CpJJetEoX5axSK5siXGhhTjl6ws\n51984jXYKDnVTSGTzNX3UyCL1/xSE5RcdZVfR0qS650q77X8YBguBNWvHbPt\nTIY1\r\n=7qZK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCn4S0hTiEmm9M1IkcMsgtZfqjdtZ0PKHQ6YzL0P57DMQIhAMJmm7CPCA92W2bRetYzdxo8HxgBaceGHacqEXXJ+f6R"}]},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.1_1604238782236_0.17334081507171284"},"_hasShrinkwrap":false},"1.0.0-beta.2":{"name":"space-lift","version":"1.0.0-beta.2","description":"Idiomatic Typescript Array, Object, Map, Set, Union, Enum utils","sideEffects":false,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"700c8bd904d281de76823a840b46d188dc95be41","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.2","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-PsF+HR+sc9SsDjciKGt/mam8RMkrk78OSO5lb26ntxz71JAluT9YZge93wrEVAIYftMEsahjFJATNEHY9DHrOA==","shasum":"ac417a8a75bcf8c2b6165fa6ff0cb72021eb48a3","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.2.tgz","fileCount":46,"unpackedSize":95769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnyORCRA9TVsSAnZWagAAkh0P/ji0hZdTfqc08d4ak7fC\nQuSaccHaL0pVSGsJ/l4oq4Y3E7THIeNJNUNRxWpHMVJoMU2hgwwY7sqw+igb\njeo5HposF+SesTld4i+9SpewP5l+Ki7+B6It5G4BvHugMit8RKhi/ZoaP+pb\nKfJtHh/QqE5Klpxq0hB7aLSWSZBiYczVtDVqtz2T7ZfibhYwYUMqymY/KkOj\nLswWbQlzwqqj7vy22iAlp6UnlO4QtZb1guTSVqAL6a3+ti0BIgbjLW5GUJKw\nHeZETFSdm1miicssQVvoyS+fYbzygwFedbaVYi9W6lA+ESRXObROh9fuz+LH\nTywsDVeNRM3SXQFxBiKPi5PAx6gGVV3WwHwCqjjj2dlWg93DL1DRdTZ8YKme\n2L9sI9DYS+2O0r9bPefGRPsEigeMKtwATAXTXD5Z29UFfX58BAEO6XufVoqU\nqwptPm8cwFcsDICZaLCE17nxid6MPGO5sXNAlyV6f7CK+aEcF5gJDCCuxvoI\nPeLxcYTECb17CPIzneTlwRtdkqlhiSy0d8g6IEln4mV5uj96NL3MXs8J837x\neuwFwRyyN26AQKDNUmN0GxXWAPuhoiJkJD9fs1AyYZtWaUpE3LRKbG8jWlzj\nFpSKiKrqkyeQjG8HVNpciywk700sAd9a7IgKpqxr1Iclbhuw0SMoMnQAACHi\nGI8J\r\n=ttyW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH1SGveh+17tGuNiPMzaTcKdnIYrFzjtmo2TK0duyu2gAiEA9XjP05jpsJDVNGgLmpSGO6OrIQr/kcb/ylwPM7+lrNw="}]},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.2_1604264849111_0.09269739575088942"},"_hasShrinkwrap":false},"1.0.0-beta.3":{"name":"space-lift","version":"1.0.0-beta.3","description":"Idiomatic Typescript Array, Object, Map, Set, Union, Enum utils","sideEffects":false,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"cbe4787540d78b974dbdf3648a5581103cacb026","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.3","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0oXNAzaYxDndwKdMKSU9XGK262vnel7Npl93lb33mIk2Oy9iVrUtCl4dbsSGEKQ6T7K64CcFKnLhViGt8TiSgQ==","shasum":"438fec2d0fee27739cd081b95467b5323a04e83c","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.3.tgz","fileCount":46,"unpackedSize":95831,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfn0k7CRA9TVsSAnZWagAAV/sP+wSMjtXsQcmgzbejByGF\n3q8uOgHW6Hl6vWno8Xr7uRLqmNvbo1nEa106uGqpV6puimHSZuSwxxnNVq2d\nP36QOwx6mccN/vWHsZn0WrUmRLD1JEJTiubDDgdQcNnNi76cpDE/XB3eJzsc\n8/71lSWcymIWmonbLbTisXvfH8x3wR4BrEA9YLlNKyaWF+XM776SEh9LXTZi\nkHgWAUaMJALBsIJxIT6yPay4jfhX2zXIAE2wdGcFHicJk1jOAhlX8X4jTtBH\nfbS6qVkjhRjeDphUZjVHQG/NasOhG64jKq0bThFadQMLhVZCb6InsPRwjl/8\n1ONvxAFsa85oD80lCg/71kaBeE75WWFKfY0Mn0hP5TBEOgON7UqqXPRKsTDm\nDMf5jgCurG1vvgincEXAiCecTjPWUY42KqKsjUIB9uyyAY+kYh73J2yS5zFJ\nsD4VHssME7jX3GqMA1bi9JYI9yJjAnY/jFgE9PudRpOCyg6Yf7D7tG2BcKHv\n4+ryKL24YWjnLDFSJjt/GZnDvy353ZKlAj60Ay5uINi2hN4/CmfQFSAVApWM\nfJTZNAT5GHo/+ymAhj8+lH3BlN0CgiJg/PVy/xnk8q6YJgiqnQFo+n/5kypL\nVpXU7u5wPEvgmi8fXDY57wMddTm5zX4VNCixkOilCVnOc4Q5Doe6Ih71Gopy\nMysI\r\n=HlQj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDkO4J3frBACuiadxVjv8vsLNBvBLdBUbhEssFchz6MxAiEAh/UTUzQbcCNkBM4lQZ5bc8avzDDp+Pea6HcgEAvUbHE="}]},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.3_1604274491073_0.037260047106596694"},"_hasShrinkwrap":false},"1.0.0-beta.4":{"name":"space-lift","version":"1.0.0-beta.4","description":"Idiomatic Typescript Array, Object, Map, Set, Union, Enum utils","sideEffects":false,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"193fefc8502aad3a6cad269ffe811ab192ff82f5","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.4","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-bqtERJ+dJbYQstaIxMOkO3umM61zCiahMXP3Q+M6iG8aUrlKRTmhvJSupc8T9J/SbZczoI3umJSzxiDmkTuooA==","shasum":"a29499684fdc4095ed2992319bb32d8c0cc46ecf","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.4.tgz","fileCount":50,"unpackedSize":99567,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoxMDCRA9TVsSAnZWagAAnsgQAJ2hd1ij/LMcHApREVXM\nwqBfsuMXGIQLF64UV1XGUElmxFOjclWUq0WRMJYWJpn9V+fldESkPWthCpYS\n/7eS6OFDcsVej2TnMq01V+tkhE/PbXDW07S6IePts4VV6xs8lvJJVfiq50QB\nnfEaGTwfo9P5EKKpXmMAv+f7AugE9fH17KHRrbuHFfE+Ig0TrovMypvq1VDJ\n4P8H1srh0sR+Y4r6YhV6XP0+dteE+Nzn5x8o33BSLjn2vBxl2mQz6oTE0Psj\nj/tHj0gW5pbg/ub+yVGOzXuKEEafbzWDbqnlGNZzbiFMVmYWjKufRj4EH+J+\ni9RY/Xyu3ufAYyPIso38YiPrt8D+UOSS07fKgBHHdNHylJxP8PRko9F8QJm7\nPVNxicGQ8joE1MM3+9kI66OwBC/FT/U4us+T7BPiMT4+khTTQhwc330/8YSz\nzlwa1Viy8i+AbPxDvFWSha5Wlm6S/Vgw1osGZAlH5hxWKiqjcUdpI+Ceq5w2\nzM57PcHukC6xcrXcl/b1JZL/YOnnN3fmjttSurIOGhcqw7gCupKJwiBKFlda\nxKSHOUsei3LSm6Ryhjf28ZEkNQ3DlWllSg4l/Qc63j2xBiB/kGZOzGJ1PyRX\n4KLn9OB9z2OrKXwwaBIkyVM7cBk/8Ks9c1FhsQOJTHedYUYgZSYcXhy1IkWD\nCfWW\r\n=Bz3Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTvpU7+NyFDfHw9zOpNLaORqjGn2y9FSQ/jGEzeQX9JgIhAJOlikgCeFWxPRY8Dr2Fd6z3B8FUheyXY/d8Cj8ike2q"}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.4_1604522755191_0.497911763319943"},"_hasShrinkwrap":false},"1.0.0-beta.5":{"name":"space-lift","version":"1.0.0-beta.5","description":"Idiomatic Typescript Array, Object, Map, Set, Union, Enum utils","sideEffects":false,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"b4061d373ec223fd7f3701983d7aae562a219939","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.5","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JyplQh5tHOi7xGngF6oRE5PGxfbUcZjJmZYGo0nMhbsX1Jb/tNx1nQ605UnamkEY7XzxRmD3crdP1MkwK8tfjw==","shasum":"8542986da89d2f570e1d6fa8976ea7e3530bccc3","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.5.tgz","fileCount":50,"unpackedSize":99615,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoxoJCRA9TVsSAnZWagAANeUP/Ap862G2av/UOc8lr1Uz\nzGSoiaWXMYvdMHLg2iSVpwdxpa0LWqz9hjhc2wPaSuPizunBREyheaG0OEyV\nE0ihlNQsMpHmTVLMr6Ltr1IzBlwpmfYsbbaSYLqKZVmbDSsrSjCYB/zdajat\n/3CSPhDaM5aOV4qEmLKj4iBYcFHENKQPlDQzn7eFv/J0cf8BcqoILWSdxbp+\nFB5MeKxf+PHiSGGPzk6XjNMJlvBDD5NroCxbwo0P9psoRNPPdINiwJZTJEXQ\nAu0mTFr8/Fqma35Gz34VFbpjmhBJ/wg1X3GyzsJyFM68/EzB2QyaGHhLp47D\nlAo551AFTkz9X1xytInaHvCRLca1+iBs5fWLjeVa4djNPBSCGW2gs9mzGRYn\nfyFgeYBKOD5bx/oVOOpebcY1xw/lxwacD0lW5jeb4bscZ1mLi7k0zqJkC4Qv\nis3xYlBMH0stwtN1E6tUZh2WH3ENd82YSn7hsb+N02ooJDtBhsDH0XRgIQM1\nLVkTzx6aeLJwAVPt3vWhHsT+ac/iFvAykxP4lAFaLXvqEuXnh3TVRLafb4qH\nivmJMSpADdhZsRFdlp3GRZq2DdEfwUJXDMMwCGXHZRL4blWLiMiYgqncz7b3\nceT5DSb03BAEZlwlwuDCxpj8z6YHKtsUGyJUlNGqCa4/2IZlcL4MK5jkTLEv\nIQqr\r\n=SWAK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5YRIYY/jSD99lyyE9EOa5ok+PSZ9UaBzXBT+FHKmMdwIhAN32+sMdiCcJzozLghnddM0xvR9o8uTOJZpa8iq3Jsq8"}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.5_1604524553309_0.7352411645212609"},"_hasShrinkwrap":false},"1.0.0-beta.6":{"name":"space-lift","version":"1.0.0-beta.6","description":"Idiomatic Typescript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"2799b83fff0e59bd257abfef7739e6299b5ff70a","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.6","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-yaN91AOKrqCOy0OBhhUwpF6BAGSXrGYpl/t2Zfcl6Rrx5cOZ9C6RQ/tEIMake6cRHQDXNLHBRM5Ag/iHZDIbrw==","shasum":"6b95d4b5df7bb4dbbba561ca22a10cf4339707d7","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.6.tgz","fileCount":50,"unpackedSize":99614,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfo0etCRA9TVsSAnZWagAALy0QAIX+RF0SqtbdfUU6agIA\nLnVxzLta74Mykjl/nOUrePl+pHTh2GP1O6nDE+JwWQsIPixZiWUm07zPSfMm\nwx08wLmdqCHD0C/F39tj9drSb8wkEvrGfz3kfX5kMIVrOidTvkKHDy6rr43m\n4FEltY8h+l/XHrx3GqBgTtVmZONPTqHe7DgF16c/Qk+RxHiL28tiWLctgJZj\nCiwfqtSNIhpGRbpxESK6lUt08vg/7ceYClulufhiZMaqenGRYjrot62qWZfJ\nBGQNoUVPHSZpgRbBnZ1rTw3j0tkTV2kpn/VKSB6mASqFrXSHR5dbL+aYZv3h\n3SxMoW8y26pCyTdf3oKPTHFdleGY4fuPbJAPHLMwxkL3M2OhFpTcMmJTly0I\nS2EQAvZqnnsfvf39HV0deU1Otfkdl4T1hJRwuWrz4atWlvIK5ilZGw31yAFe\nhNKBjDrb4HlKGEHk0f9FcLE0swp0FGT5PHOgFwBWBg4Z1ydubI7RZ91geirS\nZ85gLuKKpEp5dpQiAG90qPZkVJNhnYFhKKtmje1jCNkt59tucywQozt2zSN2\nwgqwfTLppQTJMyl3+dl8Sm6hSpN9ojWkXmNKCmvDG1/bJj5VDeznkGqWriN9\nbv5P6w/WCEM9wn64+v/zDa4eJrxtogXYuzHwDjv+8Vf0Ir4Oy32G+nkQN3a1\nYzru\r\n=uDY8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSt2UFNF3lvhFXSb+bhvirCTXY2qBBBSm2DmNEmEOQzQIgPV3ZhAMRvS8eyEVRP8bDMDJNLm4gQ3uUBbODITK+Nzc="}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.6_1604536237357_0.103627355098447"},"_hasShrinkwrap":false},"1.0.0-beta.7":{"name":"space-lift","version":"1.0.0-beta.7","description":"Idiomatic Typescript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"ac0acc41e9510d5e025a64160d6aebb777a538fc","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.7","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xUbSqPu2La0AsLaB36UC4gA5Qbwyrfmbwft+8a2w4I0vs6gU3k4aPXBhS1nIoRFB2UEi53lmBaIOoEa//TJ4iQ==","shasum":"20f656eaf0a3d7265771cdbe054535a024c3976b","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.7.tgz","fileCount":50,"unpackedSize":102494,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfp+mwCRA9TVsSAnZWagAA+sAQAIxFNwL1bMSeevn1pG1i\nrBtffTXa+vv+6cSDaDkUOYKvqdIkHs1rD/VmLoH6KVYshStehDzbpAL5jePW\naW+Ck0acQ9c6itfFfYa+WzkYzQCr0UF9pE1A7yO4I/Y+1UDaTq5ZmLReim4I\n3nF2BQYZeHmTTF3HhCSQ/uiAAKr8DKJ0lqE/wLyJnWdJD83rlkaqLskeBaGK\nYWDOOeZJbTxIkWmT/S4WlUXe067cFj5VmmNl4VLGGHaV+/og1vBZxLWA6e/1\nOQnwSSgXN3YBkxfmxMusj/ZLeHzNF+SpZ4HXOniL0mnyWIrutFa5oSKIuokh\nKddKIfwxkuZyyDd6Gnd5KgruJ7Tp6un677egMDT6TyFup6W1ODJVPZpgCIBE\nbdCm/nTQH44sFtgIrBGZpBHIX/H94ypzWWEae6o9Mv3PtVbcDFUcG5IDJZpg\nA3fksQ9EfvEMk8uYgpPVMrUKUrDtqdheGmkRqsket0gMBj2N1LUbzTA3/B/m\nHe4OppLfeBkp6PVYUo+aE++3jgdxClFbJlKJN2hGeSZFx7P1UGJp6NHJk6KU\npdb3didDZPbKrKRls7JfrDV/de7ufpAdaTQuFzAEII9YCj9FboqHLWhiXMne\nqLS0I3bmQtBCGpFunQLU23aS0wfdBPeK3nLsjEv1xliC+txBm5nLm5E6ugdF\nK/31\r\n=8BxM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaAaFn38DooXkRFsBN7aGXnOX+5YkxoBNUptX+F6c+IAIgGpGzlLkITUl90wYhgzDsEq7FkIxcPNNtx7XzOe59ROo="}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.7_1604839855533_0.10788648178700377"},"_hasShrinkwrap":false},"1.0.0-beta.8":{"name":"space-lift","version":"1.0.0-beta.8","description":"Idiomatic TypeScript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"73eb8dbabac4c58c6d742079b87f14bf3c358a58","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.8","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-cFFna70NI61cLtSO/Qd3TQMy8T3ekY11cmSWlkxEclo4JXYTXzORRJ+C/sCJ06G1/tMbdzl/cnqXnkJm0uCFZg==","shasum":"cb3d626ccad21ac3eba3ea10c74fe06b44c6fe8e","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.8.tgz","fileCount":50,"unpackedSize":106494,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqD5KCRA9TVsSAnZWagAAoqgP/2pTWYXO96SJAx74WczS\nbjAxCxZ6v9EUGmdYSR95A6CM/C88Elxab2VYWHExWjOXeL8xn2tr/QlLAE18\n6Cp3asRlj2Qpn8aDrpKBzaBAWJG4oxTJFn99QOIibkym4HFNgWJVJ552oJtN\nZDJ+uIuOqiYwwsHm4cskRlQyM0bx8reYSY+2g8IT5rjSuScfhh7cdLlR95kG\nDFVStcOiPSsnPvbcPEhY1I2v/0BKUHh4vVzLjJONsuZ1dljfUUl2pRtiPIGo\n2qbKD4MpyQ64OjCOIMaVs4xxBGG6d58PDAasA5+36kFG65exyMt25Wo3TBIR\njg9MbhXGxlQpnI/WHQW1+AEzPuRZYlcrE5VN/l4UdvaBhunTXRgR24TkUow7\nVbROQ718sC8j5GHrlnXGtf75b4Fue5HHZzctk1ffhTbAxMCZKSYQPBzFgnHs\n4ppNqUH6Y5sq7kgJF1ujOz4tqQ7SeegfctMWrw1+uyfpR1k0O/sYH+uf4HaI\ntFIbIveo5JySWr13KpPhW7DbMscFbm+KOxHLHj2YhnqBzP2/UdKlnYNkQ3Pu\n1wYnws6hDVXd3sQ4MVQcB0/IGTihUl5Djf7u0agHW5mDuyf9aMvAgtNBETwW\nJ+omGAQSMaOLICgWzyPXYDfTyrz5oJYWBRU8l285cuMB8akVEex0xBxsVRRB\niG6h\r\n=OrJ4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC24nNuV2YweLMbc+gCdJibTRowl9ajBXHVBaVAyc1a+gIgEtTB1IXLrOHNIQwufDZXTm+qHWspeLXS0Yd6erPgjFQ="}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.8_1604861513699_0.45663799125844284"},"_hasShrinkwrap":false},"1.0.0-beta.9":{"name":"space-lift","version":"1.0.0-beta.9","description":"Idiomatic TypeScript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"readme":"**space-lift**\n\"Lift your values into space for infinite possibilities\"\n\n![](http://i.imgur.com/DWrI2JY.gif?noredirect)\n\n\n# Rich Array, Object, Map, Set wrapper\n\nDesign goals\n- 100% immutable, no magic, no overwhelming polymorphism or dynamic operators\n- Fun to use\n- Correctness and first-class typescript typings\n- Tiny and performant\n- Small set of functions, configurable with lambdas\n- Cover 95% of frontend data transformation needs without becoming a bloated lib just to cover the remaining 5%\n\n\n* [How to use](#howtouse)\n* [Examples](#examples)\n* [Auto unwrap](#autounwrap)\n* [API](#api)\n  * [Array](#api.array)\n  * [Object](#api.object)\n  * [enum](#api.enum)\n  * [union](#api.union)\n\n\n<a name=\"howtouse\"></a>\n# How to use\n\nHere's everything that can be imported from `space-lift`:\n\n```ts\nimport { lift, update, range, is, createUnion, createEnum, identity, noop } from 'space-lift'\n```\n\n`lift` is the main attraction and is used to wrap an Array, Object, Map or Set to give it extra functionalities  \n\n`update`, `deepUpdate`, `DELETE` come from [immupdate](https://github.com/AlexGalays/immupdate)\n`Option`, `Some`, `None` are used to work with optional values\n`Result`, `Ok`, `Err` are used to work with computation that may fail\n`range` is a factory function for Arrays of numbers\n`Set` is a factory function for objects acting as Sets\n`is` is a helper used to determine if an instance is of a particular type (e.g `is.array([]) === true`)\n`fromArrayLike` converts an Array like object (FileList, HTMLCollection, etc) into a standard Array\n`tuple` creates a properly typed tuple\n\nBy default, the library provides no operators to the Wrapped Arrays/Objects at all. You get to choose what to import.\n\nThe fastest way is to install everything in a single import (probably in your main file):\n\n```ts\nimport 'space-lift/es/all' // For bundlers who work more efficiently with ECMAScript modules\n\nimport 'space-lift/commonjs/all' // To use the legacy commonjs modules\n```\n\nBut you can also choose exactly what to import:\n\n```ts\nimport 'space-lift/es/array/map'\nimport 'space-lift/es/object/mapValues'\n```\n\nNote: When using typescript, don't forget to enable (at least) these two flags for better type-safety: `noImplicitAny`, `strictNullChecks`\n\n\n\n<a name=\"examples\"></a>\n# Examples\n\n## Update an object inside an Array\n\n```ts\nimport lift, { update } from 'space-lift'\n// or import _ from 'space-lift'  ʘ‿ʘ\n\nconst people = [\n  { id: 1, name: 'jon' },\n  { id: 2, name: 'sarah' },\n  { id: 3, name: 'nina' }\n]\n\nconst updatedPeople = lift(people)\n  .findIndex(p => p.id === 2)\n  .map(index => lift(people).updateAt(index, person => update(person, { name: 'Nick' })))\n  .getOrElse(people)\n```\n\n## Sort on two fields\n\n```ts\nimport lift from 'space-lift'\n\nconst people = [\n  { first: 'jon',   last: 'haggis' },\n  { first: 'sarah', last: 'john' },\n  { first: 'nina',  last: 'pedro' }\n]\n\n// This will result in an Array sorted by first name, then by last name\nconst sortedPeople = lift(people)\n  .sort({ by: p => p.last })\n  .sort({ by: p => p.first })\n  .value()\n```\n\n<a name=\"autounwrap\"></a>\n# Auto unwrap\n\nMost of the time, you will have to call `.value()` to read your value back (or `.get()` for options, although it is recommended to use `map`/`getOrElse`/etc instead)\nBecause it's distracting to write `.value()` more than once per chain, some operators will automatically unwrap values returned from their iterators (like Promise->then).\nThese operators are:\n\n- `Option.map`\n- `Array.map`\n- `Array.flatMap`\n- `Array.updateAt`\n- `transform`\n\n\n<a name=\"api\"></a>\n# API\n\n\n\n<a name=\"api.array\"></a>\n## Array\n\n* [lift(array)](#lift.array)\n* [append](#array.append)\n* [appendAll](#array.appendAll)\n* [compact](#array.compact)\n* [count](#array.count)\n* [distinct](#array.distinct)\n* [drop](#array.drop)\n* [dropRight](#array.dropRight)\n* [every](#array.every)\n* [filter](#array.filter)\n* [find](#array.find)\n* [findIndex](#array.findIndex)\n* [first](#array.first)\n* [flatMap](#array.flatMap)\n* [flatten](#array.flatten)\n* [fold](#array.fold)\n* [foldRight](#array.foldRight)\n* [fromArrayLike](#array.fromArrayLike)\n* [get](#array.get)\n* [groupBy](#array.groupBy)\n* [insert](#array.insert)\n* [insertAll](#array.insertAll)\n* [join](#array.join)\n* [last](#array.last)\n* [map](#array.map)\n* [range](#array.range)\n* [removeAt](#array.removeAt)\n* [reverse](#array.reverse)\n* [some](#array.some)\n* [sort](#array.sort)\n* [take](#array.take)\n* [takeRight](#array.takeRight)\n* [toSet](#array.toSet)\n* [updateAt](#array.updateAt)\n\nTODO: Detail and examples\n\n\n<a name=\"api.object\"></a>\n## Object\n\n* [lift(object)](#lift.object)\n* [add](#object.add)\n* [assoc](#object.assoc)\n* [contains](#object.contains)\n* [dissoc](#object.dissoc)\n* [filter](#object.filter)\n* [get](#object.get)\n* [is](#object.is)\n* [isEmpty](#object.isEmpty)\n* [keys](#object.keys)\n* [mapValues](#object.mapValues)\n* [remove](#object.remove)\n* [set](#object.set)\n* [toArray](#object.toArray)\n* [values](#object.values)\n\nTODO: Detail and examples\n\n\n\n<a name=\"api.function\"></a>\n## Function\n\n### memoize\n\n```ts\nimport { memoize } from 'space-lift'\n\nfunction multiply(a: number, b: number) {\n  return a * b\n}\n\n// Using reference equality on every arg\nconst memoizedMultiply = memoize(multiply)\n\n\nconst myObj = { id: 10 }\n\n// Using memo keys\nconst memoized = memoize(\n  (a: number, b: typeof myObj): {} => ({ x: a, y: b }),\n  { key: (a, b) => `${a}_${b.id}` }\n)\n\n```\n\n\n<a name=\"api.option\"></a>\n## Option\n\n* [Option()](#Option())\n* [Option.all()](#Option.all)\n* [Option.isOption](#Option.isOption)\n* [None](#option.None)\n* [map](#option.map)\n* [flatMap](#option.flatMap)\n* [filter](#option.filter)\n* [fold](#option.fold)\n* [orElse](#option.orElse)\n* [isDefined](#option.isDefined)\n* [get](#option.get)\n* [getOrElse](#option.getOrElse)\n* [forEach](#option.forEach)\n* [contains](#option.contains)\n* [exists](#option.exists)\n* [toArray](#option.toArray)\n\n\n### Creating an Option\n\n<a name=\"Option()\"></a>\n#### Option(x)\n\nCreates an Option from a value.\nIf the value is null or undefined, it will create a None, else a Some.\n\n```ts\nconst some = Option(33) // some === Some(33)\nconst none = Option(null) // none === None\n```\n\nIf you already know the value is defined for sure (not nullable) or not, you can create a `Some` or `None` directly:\n\n```ts\nconst some = Some(33) // Some(null | undefined) wouldn't compile.\nconst none = None\n```\n\n\n<a name=\"Option.all\"></a>\n#### Option.all([...optionsOrValues])\n\nCreates a new Option holding the tuple of all the values contained in the passed array if they were all Some or non null/undefined values,\nelse returns None\n\n```ts\nconst some = Option.all([\n  Option(10),\n  20,\n  Option(5)\n])\n// some === Some([10, 20, 5])\n\nconst none = Option.all([\n  Option(10),\n  None,\n  Option(5),\n  null\n])\n// none === None\n```\n\n<a name=\"Option.isOption\"></a>\n#### Option.isOption\n\nReturns whether the passed instance in an Option, and refines its type\n\n```ts\nimport { Option, Some } from 'space-lift'\nOption.isOption(Some(33)) // true\n```\n\n\n<a name=\"option.None\"></a>\n#### None\n\nThe Option constant representing no value.\n\n```ts\nimport { None } from 'space-lift'\n```\n\n\n### Transforming an Option\n\n<a name=\"option.map\"></a>\n#### map\n\nMaps the value contained in this Some, else returns None.\nDepending on the map function return value, a Some could be tranformed into a None, as a Some is guaranteed to never contain a null or undefined value.\n\n```ts\nconst some = Option(33).map(x => x * 2)\n// some === Some(66)\n```\n\n<a name=\"option.flatMap\"></a>\n#### flatMap\n\nMaps the value contained in this Some to a new Option, else returns None.\n\n```ts\nconst some = Option(33).flatMap(_ => Option(44))\n// some === Some(44)\n```\n\n<a name=\"option.filter\"></a>\n#### filter\n\nIf this Option is a Some and the predicate returns true, keep that Some.\nIn all other cases, return None.\n\n```ts\nconst some = Option(33).filter(x => x > 32)\n// some === Some(33)\n```\n\n<a name=\"option.fold\"></a>\n#### fold\n\nApplies the first function if this is a None, else applies the second function.\nNote: Since this method creates 2 functions everytime it runs, don't use in tight loops; use isDefined() instead.\n\n```ts\nconst count = Option(10).fold(\n  () => 100, // None\n  count => count * 10 // Some\n)\n```\n\n<a name=\"option.toArray\"></a>\n#### toArray\n\nTransforms this option into an Array or either 1 or 0 element.\n\n\n<a name=\"option.orElse\"></a>\n#### orElse\n\nReturns this Option unless it's a None, in which case the provided alternative is returned.\n\n```ts\nconst some = Option(null).orElse(() => Option(33))\n// some === Some(33)\n```\n\n### Misc\n\n<a name=\"option.get\"></a>\n#### get\n\n`Some` instances return their value, whereas `None` always return `undefined`.\nThis method never throws.\n\n```ts\nconst value = Some(33).get()\n// value === 33\n```\n\n<a name=\"option.isDefined\"></a>\n#### isDefined\n\nReturns whether this Option has a defined value (i.e, it's a Some(value))\nNote: this refines the type of the Option to be a Some so it's guaranteed its value is not null/undefined.\n\n\n<a name=\"option.getOrElse\"></a>\n#### getOrElse\n\nReturns this Option's value if it's a Some, else return the provided alternative\n\n```ts\nconst value = Option(undefined).getOrElse(33)\n\n// value === 33\n```\n\n\n<a name=\"option.forEach\"></a>\n#### forEach\n\nApplies the given procedure to the option's value, if it is non empty.\n\n```ts\nOption(33).forEach(x => console.log(x))\n```\n\n<a name=\"option.contains\"></a>\n#### contains\n\nReturns whether this option is a Some that contain a specific value, using ===\n\n```ts\nOption(30).contains(30) // true\n```\n\n<a name=\"option.exists\"></a>\n#### exists\n\nReturns whether this option is a Some with a value satisfying the predicate.\n\n```ts\nOption(30).exists(n => n > 10) // true\n```\n\n\n\n<a name=\"api.result\"></a>\n## Result\n\n* [Result, Ok, Err](#Result)\n* [Result.isResult](#Result.isResult)\n* [Result.all](#Result.all)\n* [isOk](#result.isOk)\n* [map](#result.map)\n* [mapError](#result.mapError)\n* [flatMap](#result.flatMap)\n* [fold](#result.fold)\n\n\nA `Result` is the result of a computation that may fail. An `Ok` represents a successful computation, while an `Err` represent the error case.\n\n\n<a name=\"Result\"></a>\n### Importing Result\n\nHere's everything that can be imported to use Results:\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nconst ok = Ok(10)\nconst err = Err('oops')\n```\n\n<a name=\"Result.isResult\"></a>\n### Result.isResult\n\nReturns whether this instance is a Result (either an Ok or a Err) and refines its type\n\n```ts\nimport { Result, Ok } from 'space-lift'\n\nResult.isResult(Ok(10)) // true\n```\n\n<a name=\"Result.all\"></a>\n### Result.all\n\nCreates a new Ok Result holding the tuple of all the values contained in the passed array if they were all Ok,\nelse returns the first encountered Err.\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nconst result = Result.all([\n  Ok(20),\n  Err('nooo'),\n  Ok(200),\n  Err('oops')\n]) // Err('nooo')\n```\n\n\n<a name=\"result.isOk\"></a>\n### isOk\n\nReturns whether this is an instance of Ok\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nOk(10).isOk() // true\n```\n\n\n<a name=\"result.map\"></a>\n### map\n\nMaps the value contained in this Result if it's an Ok, else propagates the Error.\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nOk(10).map(x => x * 2) // Ok(20)\nErr(10).map(x => x * 2) // Err(10)\n```\n\n\n<a name=\"result.mapError\"></a>\n### mapError\n\nMaps the Error contained in this Result if it's an Err, else propagates the Ok.\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nOk(10).mapError(x => x * 2) // Ok(10)\nErr(10).mapError(x => x * 2) // Err(20)\n```\n\n\n<a name=\"result.flatMap\"></a>\n### flatMap\n\nMaps the value contained in this Result with another Result if it's an Ok, else propagates the Error.\nNote: It is allowed to return a Result with a different Error type.\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nOk(10).flatMap(x => Ok(x * 2)) // Ok(20)\nOk(10).flatMap(x => Err(x * 2)) // Err(20)\n```\n\n\n<a name=\"result.fold\"></a>\n### fold\n\nApplies the first function if this is an Err, else applies the second function.\nNote: Don't use in tight loops; use isOk() instead.\n\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nOk(10).fold(\n  err => console.error(err),\n  num => num * 2\n) // 20\n```\n\n<a name=\"api.enum\"></a>\n## createEnum\n\nCreates a type safe string enumeration from a list of strings, providing:  \nthe list of all possible values, an object with all enum keys and the derived type of the enum in a single declaration.\n\n```ts\n  import { createEnum } from 'space-lift/es/enum'\n\n  const enumeration = createEnum('green', 'orange', 'red')\n\n  // We can use the derived type\n  type StopLightColor = typeof enumeration.T\n\n  // We can list all enum values as an Array\n  enumeration.values // ['green', 'orange', 'red'])\n\n  // We can access each value of the enum directly\n  const color = enumeration.enum\n\n  const redish: StopLightColor = 'red'\n  const greenish: StopLightColor = color.green\n  const orange: 'orange' = color.orange\n  orange // 'orange'\n```\n\n<a name=\"api.union\"></a>\n## createUnion\n\nCreates a type-safe union, providing: derived types, factories and type-guards in a single declaration.\n\n```ts\n  import { createUnion, empty } from 'space-lift'\n\n  // Let's take the example of a single input Form that can send a new message or edit an existing one.\n  // createUnion() gives you 3 tools:\n  // T: the derived type for the overall union\n  // is: a typeguard function for each state\n  // Lastly, the returned object has a key acting as a factory for each union member\n  const formState = createUnion({\n    creating: empty,\n    editing: (msgId: string) => ({ msgId }),\n    sendingCreation: empty,\n    sendingUpdate: (msgId: string) => ({ msgId }),\n  });\n\n  // The initial form state is 'creating'\n  let state: typeof formState.T = formState.creating() // { type: 'creating' }\n\n  // If the user wants to edit an existing message, we have to store the edited message id. Lets update our state.\n  onClickEdit(msgId: string) {\n    state = formState.editing(msgId) // { type: 'editing', msgId: 'someId' }\n  }\n\n  // In edition mode, we could want to get the message and change the send button label\n  if (formState.is('editing')(state)) {\n    getMessage(state.msgId) // thanks to the typeguard function, we know msgId is available in the state\n    buttonLabel = 'Update message'\n  }\n\n  // If needed, we can also access the derived type of a given state\n  type EditingType = typeof formState.editing.T\n  const editingObj: EditingType = formState.editing('someId')\n```\n","readmeFilename":"README.md","gitHead":"60fcb1674c841984d297b2b1cefd6f88fffa66de","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.9","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NYo8bvV1Ea0Owmz1+NK8V2FsHRBoEG5y322YCwCI+v8nOchOLe92zMpt6eKz4XuONnXF0weZE54oW9LINb65dw==","shasum":"e3b09377c95d82683c5db561298a9063efd7bbdd","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.9.tgz","fileCount":50,"unpackedSize":108267,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs563CRA9TVsSAnZWagAA/K0P/2y587/ri1R1xqhjVGX6\nZRLOQwvZ7k9OpwJnrGxZWjyrEQC8cubpbhOQwurfph5jm+4nN2GLdPJ0JsIe\nb66egWzZZBR/D+d+WI3nG8N72eQJHJyzGOIEuDRBUdh+V0j79Xp0n8hr16b+\nDi3H4I2BWsYLT5XiMpQbNvOpjlcr8pUnySYoyXYtVUkKuG8Y1poeP64F6ivh\nafIRkCU3vDWWMUEMjT9rwlpPYXIuv76ZgbEwdjZMKGSsyRi8Tc1XOykP5feD\nQIC62pFWPlMnp8SR9vJrjK2Zq/PI7UmfWITJaE3+m0B2aZ88R5NttEZlu4+b\ngFsiUjDuzwrL0kHF+3RtqoprGHAxxufvDqDiWRp/krfwi0LzzwAEgbyCllkJ\nWUJbJANbe0/twWKvHpvQDecL4Cd1k5t3s5u27mA/huFJQC59WoGwekgsGja4\nUCHwpRhOtYUr9hu673rSYkh60EkSA58VkW/yFFSKrttb37ub61LTSrhf0KfW\nn9IhqjbEUU4kLmNOr5XrkKF17ortj0RsOSiQPTR+ysInaD4P5QdNmbP9+AvO\n5s/jvbHa9AudQUPh7VlZpDt0UCJMN37bCOkOoH7pCiAQyt7GiqmNTlP4lAl6\nqkw8Wr6ZMjysFGd6HYfIL5hCQuVsoomFSkx2hDGvY2Qqw7GmgZiiaXKYUDWo\nTNlv\r\n=ujHP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuBLsNg05vpm7FvGMgHEOd7bO4+/Ce9QNOdb3cvmhftAIhAJsXVK+kpUIom8GszGwEDBpwTR/SLRUZZ580fqwaPMtx"}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.9_1605607094438_0.5968633617553187"},"_hasShrinkwrap":false},"1.0.0-beta.10":{"name":"space-lift","version":"1.0.0-beta.10","description":"Idiomatic TypeScript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"readme":"**space-lift**\n\"Lift your values into space for infinite possibilities\"\n\n![](http://i.imgur.com/DWrI2JY.gif?noredirect)\n\nNote: Starting from version `1.0.0`, `space-lift` no longer contains the `Option` and `Result` monads. You can find these at [space-monad](https://github.com/AlexGalays/space-monad)\n\n\n# Rich Array, Object, Map, Set wrapper\n\nDesign goals\n- 100% immutable, no magic, no overwhelming polymorphism or dynamic operators\n- Fun to use\n- Correctness and first-class typescript typings\n- Tiny and performant\n- Small set of functions, configurable with lambdas\n- Cover 95% of frontend data transformation needs without becoming a bloated lib just to cover the remaining 5%\n\n* [How to use](#howtouse)\n* [Examples](#examples)\n* [API](#api)\n  * [Array](#api.array)\n  * [Object](#api.object)\n  * [Map](#api.map)\n  * [Set](#api.set)\n  * [update](#api.update)\n  * [createEnum](#api.enum)\n  * [createUnion](#api.union)\n  * [Result](#api.result)\n* [Auto unwrap](#autounwrap)\n\n\n<a name=\"howtouse\"></a>\n# How to use\n\nHere's everything that can be imported from `space-lift`:\n\n```ts\nimport {\n  lift,\n  update,\n  range,\n  is,\n  createUnion,\n  createEnum,\n  identity,\n  noop,\n  Result,\n  Ok,\n  Err,\n  Immutable\n} from 'space-lift'\n```\n\n- `lift` is the main attraction and is used to wrap an Array, Object, Map or Set to give it extra functionalities  \n- `update` can update an Object, Array, Map or Set without modifying the original  \n- `range` is a factory function for Arrays of numbers  \n- `is` is a helper used to determine if an instance is of a particular type (e.g `is.array([]) === true`)  \n- `createUnion` creates a bunch  of useful things when working with discriminated unions.  \n- `createEnum` creates a bunch of useful things when working with a string based enum.  \n- `identity` the identity function\n- `noop` a function that does nothing\n- `Result`, `Ok`, `Err` are used to work with computation that may fail  \n- `Immutable` a type that will recursively make a tree `Readonly`.\n\n\n<a name=\"examples\"></a>\n# Some Examples\n\n## Update an object inside an Array\n\n```ts\nimport { update } from 'space-lift'\n\nconst people = [\n  { id: 1, name: 'jon' },\n  { id: 2, name: 'sarah' },\n  { id: 3, name: 'nina' }\n]\n\nconst updatedPeople = update(people, draft => {\n  draft.updateIf(\n    p => p.id === 2,\n    personDraft => {personDraft.name = 'Nick'})\n})\n```\n\n## Sort on two fields\n\n```ts\nimport lift from 'space-lift'\n\nconst people = [\n  { first: 'jon',   last: 'haggis' },\n  { first: 'sarah', last: 'john' },\n  { first: 'nina',  last: 'pedro' }\n]\n\n// This will create an Array sorted by first name, then by last name\nconst sortedPeople = lift(people)\n  .sort(p => p.first, p => p.last)\n  .value()\n```\n\n<a name=\"api\"></a>\n# API\n\n<a name=\"api.array\"></a>\n## Array\n\n* [clone](#array.clone)\n* [append](#array.append)\n* [appendAll](#array.appendAll)\n* [compact](#array.compact)\n* [count](#array.count)\n* [collect](#array.collect)\n* [distinct](#array.distinct)\n* [drop](#array.drop)\n* [dropRight](#array.dropRight)\n* [filter](#array.filter)\n* [first](#array.first)\n* [flatMap](#array.flatMap)\n* [flatten](#array.flatten)\n* [fold](#array.fold)\n* [get](#array.get)\n* [groupBy](#array.groupBy)\n* [insert](#array.insert)\n* [last](#array.last)\n* [map](#array.map)\n* [removeAt](#array.removeAt)\n* [reverse](#array.reverse)\n* [sort](#array.sort)\n* [take](#array.take)\n* [takeRight](#array.takeRight)\n* [toSet](#array.toSet)\n* [update](#array.update)\n* [updateAt](#array.updateAt)\n* [pipe](#array.pipe)\n\n<a name=\"array.clone\"></a>\n### Array.clone\n\nShallowly clones the Array.\n\n```ts\nimport {lift} from 'space-lift'\nconst cloned = lift([1, 2, 3]).clone().value() // [1, 2, 3]\n```\n\n<a name=\"array.append\"></a>\n### Array.append\n\nAppends one item at the end of the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).append(4).value() // [1, 2, 3, 4]\n```\n\n<a name=\"array.appendAll\"></a>\n### Array.appendAll\n\n<a name=\"array.compact\"></a>\n### Array.compact\n\n<a name=\"array.count\"></a>\n### Array.count\n\n<a name=\"array.collect\"></a>\n### Array.collect\n\n<a name=\"array.distinct\"></a>\n### Array.distinct\n\n<a name=\"array.drop\"></a>\n### Array.drop\n\n<a name=\"array.dropRight\"></a>\n### Array.dropRight\n\n<a name=\"array.filter\"></a>\n### Array.filter\n\n<a name=\"array.first\"></a>\n### Array.first\n\n<a name=\"array.flatMap\"></a>\n### Array.flatMap\n\n<a name=\"array.flatten\"></a>\n### Array.flatten\n\n<a name=\"array.fold\"></a>\n### Array.fold\n\n<a name=\"array.get\"></a>\n### Array.get\n\n<a name=\"array.groupBy\"></a>\n### Array.groupBy\n\n<a name=\"array.insert\"></a>\n### Array.insert\n\n<a name=\"array.last\"></a>\n### Array.last\n\n<a name=\"array.map\"></a>\n### Array.map\n\n<a name=\"array.removeAt\"></a>\n### Array.removeAt\n\n<a name=\"array.reverse\"></a>\n### Array.reverse\n\n<a name=\"array.sort\"></a>\n### Array.sort\n\n<a name=\"array.take\"></a>\n### Array.take\n\n<a name=\"array.takeRight\"></a>\n### Array.takeRight\n\n<a name=\"array.toSet\"></a>\n### Array.toSet\n\n<a name=\"array.update\"></a>\n### Array.update\n\n<a name=\"array.updateAt\"></a>\n### Array.updateAt\n\n<a name=\"array.pipe\"></a>\n### Array.pipe\n\n\n\n<a name=\"api.object\"></a>\n## Object\n\n* [lift(object)](#lift.object)\n* [add](#object.add)\n* [assoc](#object.assoc)\n* [contains](#object.contains)\n* [dissoc](#object.dissoc)\n* [filter](#object.filter)\n* [get](#object.get)\n* [is](#object.is)\n* [isEmpty](#object.isEmpty)\n* [keys](#object.keys)\n* [mapValues](#object.mapValues)\n* [remove](#object.remove)\n* [set](#object.set)\n* [toArray](#object.toArray)\n* [values](#object.values)\n\nTODO: Detail and examples\n\n\n<a name=\"api.enum\"></a>\n## createEnum\n\nCreates a type safe string enumeration from a list of strings, providing:  \nthe list of all possible values, an object with all enum keys and the derived type of the enum in a single declaration.\n\n```ts\n  import { createEnum } from 'space-lift/es/enum'\n\n  const enumeration = createEnum('green', 'orange', 'red')\n\n  // We can use the derived type\n  type StopLightColor = typeof enumeration.T\n\n  // We can list all enum values as a Set.\n  enumeration.values // Set(['green', 'orange', 'red'])\n\n  // We can access each value of the enum directly\n  const color = enumeration.enum\n\n  const redish: StopLightColor = 'red'\n  const greenish: StopLightColor = color.green\n  const orange: 'orange' = color.orange\n  orange // 'orange'\n```\n\n<a name=\"api.union\"></a>\n## createUnion\n\nCreates a type-safe union, providing: derived types, factories and type-guards in a single declaration.\n\n```ts\n  import { createUnion } from 'space-lift'\n\n  // Let's take the example of a single input Form that can send a new message or edit an existing one.\n  // createUnion() gives you 3 tools:\n  // T: the derived type for the overall union\n  // is: a typeguard function for each state\n  // Lastly, the returned object has a key acting as a factory for each union member\n  const formState = createUnion({\n    creating: () => ({}),\n    editing: (msgId: string) => ({ msgId }),\n    sendingCreation: () => ({}),\n    sendingUpdate: (msgId: string) => ({ msgId }),\n  });\n\n  // The initial form state is 'creating'\n  let state: typeof formState.T = formState.creating() // { type: 'creating' }\n\n  // If the user wants to edit an existing message, we have to store the edited message id. Lets update our state.\n  onClickEdit(msgId: string) {\n    state = formState.editing(msgId) // { type: 'editing', msgId: 'someId' }\n  }\n\n  // In edition mode, we could want to get the message and change the send button label\n  if (formState.is('editing')(state)) {\n    getMessage(state.msgId) // thanks to the typeguard function, we know msgId is available in the state\n    buttonLabel = 'Update message'\n  }\n\n  // If needed, we can also access the derived type of a given state\n  type EditingType = typeof formState.editing.T\n  const editingObj: EditingType = formState.editing('someId')\n```\n\n\n\n<a name=\"api.result\"></a>\n## Result\n\nA `Result` is the result of a computation that may fail. An `Ok` represents a successful computation, while an `Err` represent the error case.\n\n\n<a name=\"Result\"></a>\n### Importing Result\n\nHere's everything that can be imported to use Results:\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nconst ok = Ok(10) // {ok: true, value: 10}\nconst err = Err('oops') // {ok: false, error: 'oops'}\n```\n\n\n<a name=\"autounwrap\"></a>\n# Auto unwrap\n\nMost of the time, you will have to call `.value()` to read your value back.  \nBecause it's distracting to write `.value()` more than once per chain, some operators will automatically unwrap values returned from their iterators (like Promise->then).\nThese operators are:\n\n- `Array.map`\n- `Array.flatMap`\n- `Array.updateAt`\n- `pipe`","readmeFilename":"README.md","gitHead":"4bfda0b79bb022f4e1bcaaf750580d8ed3da3adb","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.10","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Jiz9lWLWDlrubwU3f7lWUva7LpXnE3tPd4iiTnbsn8uL58Ib3jLcX5QHay9a6mARTzs9NCSdQRhB5LoQHwZwLQ==","shasum":"97cb9e67c72a10c1dfced73727cf66fa15cb75f7","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.10.tgz","fileCount":50,"unpackedSize":102877,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfu5sJCRA9TVsSAnZWagAAPsAP/2bL2OlQBa7W77tRX+vT\nD8QQafC//dldpuepvYWskuLxdpFccMTXNmEX7l9TfhqRfseL9LGeUGo1+xoS\nKq7LGXuLWkkJIbF8OKC8gk7eP/DU4NvDiGKhuXYJrHGrsj0q4Q6tBwO1NCea\nCEh8AOHcLRN1E8IKbusPSL4WoVJ8EPdI1KiNS6KIAD1ycyOuaAaX2b4tBwy5\nnXy7A2aA5G9sQNVyyb27CAlwv+1Y4pw+AaNlrIlaaKsR16PmHdVRyUM0cxrW\npK2sgcwLak8d/ixb1h/6n/N0AcjTfLmdl6vOc+qDivLP1p7R2qc2HLH385At\nk3KHfBVKHqAWaCnej4CxSxIGQWquv+1NHVrCJqoKhO/nhS5E6YnUowD/4bFZ\nNX8TF1v3UySrm5qnW6s6g0vbuV5cpHUhuDlCzJPIMB2war+1VGVCNzhUaCRd\n1L7ba9zSFagbSDorDVsGZRL98LDEZiTZL9eHhrYOpSsK7oOu9OF9bZFtes37\nTsUURbfNsSwwyU1bEU3W1wiTFM4NVme5KAvc0a8+xSLfMYTI9lzsi7fnz9X/\nncnW4zH0OtulHhxf6EFkdI0ZvUtT4NlQWsmLCKN7l7RvHl4FviWV/UZuJ2Br\n3xXuxCUE6XlzesnVu7e9UPgSPo63JgkVHBZym6w/fO3EgmgVaJLlBuVeMLuX\n0O8T\r\n=kTgv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHuGjECPVLr+SMKycsGLS6/ib9boL8QI86XFgLbp2ZQsAiBJXzpgI5MJeSCxYphk9NLWYlWfojPQNv0VQAKEbopXFA=="}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.10_1606130441508_0.9335919876771526"},"_hasShrinkwrap":false},"1.0.0-beta.11":{"name":"space-lift","version":"1.0.0-beta.11","description":"Idiomatic TypeScript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"readme":"**space-lift**\n\"Lift your values into space for infinite possibilities\"\n\n![](http://i.imgur.com/DWrI2JY.gif?noredirect)\n\nNote: Starting from version `1.0.0`, `space-lift` no longer contains the `Option` and `Result` monads. You can find these at [space-monad](https://github.com/AlexGalays/space-monad)\n\n\n# Rich Array, Object, Map, Set wrapper\n\nDesign goals\n- 100% immutable, no magic, no overwhelming polymorphism or dynamic operators\n- Fun to use\n- Correctness and first-class typescript typings\n- Tiny and performant\n- Small set of functions, configurable with lambdas\n- Cover 95% of frontend data transformation needs without becoming a bloated lib just to cover the remaining 5%\n\n* [How to use](#howtouse)\n* [Examples](#examples)\n* [API](#api)\n  * [Array](#api.array)\n  * [Object](#api.object)\n  * [Map](#api.map)\n  * [Set](#api.set)\n  * [update](#api.update)\n  * [createEnum](#api.enum)\n  * [createUnion](#api.union)\n  * [Result](#api.result)\n* [Auto unwrap](#autounwrap)\n\n\n<a name=\"howtouse\"></a>\n# How to use\n\nHere's everything that can be imported from `space-lift`:\n\n```ts\nimport {\n  lift,\n  update,\n  range,\n  is,\n  createUnion,\n  createEnum,\n  identity,\n  noop,\n  Result,\n  Ok,\n  Err,\n  Immutable\n} from 'space-lift'\n```\n\n- `lift` is the main attraction and is used to wrap an Array, Object, Map or Set to give it extra functionalities  \n- `update` can update an Object, Array, Map or Set without modifying the original  \n- `range` is a factory function for Arrays of numbers  \n- `is` is a helper used to determine if an instance is of a particular type (e.g `is.array([]) === true`)  \n- `createUnion` creates a bunch  of useful things when working with discriminated unions.  \n- `createEnum` creates a bunch of useful things when working with a string based enum.  \n- `identity` the identity function\n- `noop` a function that does nothing\n- `Result`, `Ok`, `Err` are used to work with computation that may fail  \n- `Immutable` a type that will recursively make a tree `Readonly`.\n\n\n<a name=\"examples\"></a>\n# Some Examples\n\n## Update an object inside an Array\n\n```ts\nimport { update } from 'space-lift'\n\nconst people = [\n  { id: 1, name: 'jon' },\n  { id: 2, name: 'sarah' },\n  { id: 3, name: 'nina' }\n]\n\nconst updatedPeople = update(people, draft => {\n  draft.updateIf(\n    p => p.id === 2,\n    personDraft => {personDraft.name = 'Nick'})\n})\n```\n\n## Sort on two fields\n\n```ts\nimport lift from 'space-lift'\n\nconst people = [\n  { first: 'jon',   last: 'haggis' },\n  { first: 'sarah', last: 'john' },\n  { first: 'nina',  last: 'pedro' }\n]\n\n// This will create an Array sorted by first name, then by last name\nconst sortedPeople = lift(people)\n  .sort(p => p.first, p => p.last)\n  .value()\n```\n\n<a name=\"api\"></a>\n# API\n\n<a name=\"api.array\"></a>\n## Array\n\n* [clone](#array.clone)\n* [append](#array.append)\n* [appendAll](#array.appendAll)\n* [compact](#array.compact)\n* [count](#array.count)\n* [collect](#array.collect)\n* [distinct](#array.distinct)\n* [drop](#array.drop)\n* [dropRight](#array.dropRight)\n* [filter](#array.filter)\n* [first](#array.first)\n* [flatMap](#array.flatMap)\n* [flatten](#array.flatten)\n* [fold](#array.fold)\n* [get](#array.get)\n* [groupBy](#array.groupBy)\n* [insert](#array.insert)\n* [last](#array.last)\n* [map](#array.map)\n* [removeAt](#array.removeAt)\n* [reverse](#array.reverse)\n* [sort](#array.sort)\n* [take](#array.take)\n* [takeRight](#array.takeRight)\n* [toSet](#array.toSet)\n* [update](#array.update)\n* [updateAt](#array.updateAt)\n* [pipe](#array.pipe)\n\n<a name=\"array.clone\"></a>\n### Array.clone\n\nShallowly clones the Array.\n\n```ts\nimport {lift} from 'space-lift'\nconst cloned = lift([1, 2, 3]).clone().value() // [1, 2, 3]\n```\n\n<a name=\"array.append\"></a>\n### Array.append\n\nAppends one item at the end of the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).append(4).value() // [1, 2, 3, 4]\n```\n\n<a name=\"array.appendAll\"></a>\n### Array.appendAll\n\nAppends an Iterable of items at the end of the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).appendAll([4, 5]).value() // [1, 2, 3, 4, 5]\n```\n\n<a name=\"array.compact\"></a>\n### Array.compact\n\nFilters all the falsy elements out of this Array.  \nAll occurences of false, null, undefined, 0, \"\" will be removed.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, null, 2, 3, undefined]).compact().value() // [1, 2, 3]\n```\n\n<a name=\"array.count\"></a>\n### Array.count\n\nCounts the items satisfying a predicate.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3]).count(n => n > 1) // 2\n```\n\n<a name=\"array.collect\"></a>\n### Array.collect\n\nMaps this Array's items, unless void or undefined is returned, in which case the item is filtered.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3]).collect(n => {\n  if (n === 1) return;\n  return `${n*10}`\n}).value() // ['20', '30']\n```\n\n<a name=\"array.distinct\"></a>\n### Array.distinct\n\nCreates an array without any duplicate item.  \nIf a key function is passed, items will be compared based on the result of that function;  \nif not, they will be compared using strict equality.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst people = [{id: 1, name: 'Alexios'}, {id: 2, name: 'Bob'}, {id: 1, name: 'Alessia'}]\n\n// [{id: 1, name: 'Alexios'}, {id: 2, name: 'Bob'}]\nconst deduped = lift(people).distinct(p => p.id).value()\n```\n\n<a name=\"array.drop\"></a>\n### Array.drop\n\nDrops the first 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).drop(2).value() // [3]\n```\n\n<a name=\"array.dropRight\"></a>\n### Array.dropRight\n\nDrops the last 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).dropRight(2).value() // [1]\n```\n\n<a name=\"array.filter\"></a>\n### Array.filter\n\nFilters this array by aplying a predicate to all items and refine its type.  \n\n```ts\nimport {lift} from 'space-lift'\nconst filtered = lift([1, 2, 3]).filter(n => n > 1).value() // [2, 3]\n```\n\n<a name=\"array.first\"></a>\n### Array.first\n\nReturns the first element in this Array or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst first = lift([1, 2, 3]).first() // 1\n```\n\n<a name=\"array.flatMap\"></a>\n### Array.flatMap\n\nMaps this Array to an Array of Array | ArrayWrapper using a mapper function then flattens it.  \n\n```ts\nimport {lift} from 'space-lift'\nconst mapped = lift([1, 2, 3]).flatMap(n => [n + 1, n + 2]).value() // [2, 3, 3, 4, 4, 5]\n```\n\n<a name=\"array.flatten\"></a>\n### Array.flatten\n\nFlattens this Array of Arrays.  \n\n```ts\nimport {lift} from 'space-lift'\nconst flattened = lift([1, [2], [3, 4]]).flatten().value() // [1, 2, 3, 4]\n```\n\n<a name=\"array.fold\"></a>\n### Array.fold\n\nFolds this Array into a single value, using a starting value.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3).fold(0, (count, n) => count + n) // 6\n```\n\n<a name=\"array.get\"></a>\n### Array.get\n\nReturns the item found at the provided index or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst secondItem = lift([1, 2, 3).get(1) // 2\n```\n\n<a name=\"array.groupBy\"></a>\n### Array.groupBy\n\nCreates a Map where keys are the results of running each element through a discriminator function.  \nThe corresponding value of each key is an array of the elements responsible for generating the key.  \n\n```ts\nimport {lift} from 'space-lift'\nconst people = [\n  { age: 10, name: 'jon' },\n  { age: 30, name: 'momo' },\n  { age: 10, name: 'kiki' },\n  { age: 28, name: 'jesus' },\n  { age: 29, name: 'frank' },\n  { age: 30, name: 'michel' }\n]\n\n// Map<number, Array<{age: number, name: string}>>\nconst peopleByAge = lift(people).groupBy(p => p.age).value()\n```\n\n<a name=\"array.insert\"></a>\n### Array.insert\n\nInserts an item at a specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').insert(1, '20').value() // [1, 20, 2, 3]\n```\n\n<a name=\"array.last\"></a>\n### Array.last\n\nReturns the item found at the last index or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst last = lift(['1', '2', '3').last() // '3'\n```\n\n<a name=\"array.map\"></a>\n### Array.map\n\nMaps this Array using a mapper function.  \n\n```ts\nimport {lift} from 'space-lift'\nconst mapped = lift(['1', '2', '3').map(str => '0' + str).value() // ['01', '02', '03']\n```\n\n<a name=\"array.removeAt\"></a>\n### Array.removeAt\n\nRemoves the item found at the specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').removeAt(1).value() // ['1', '3']\n```\n\n<a name=\"array.reverse\"></a>\n### Array.reverse\n\nReverses the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').reverse().value() // ['3', '2', '1']\n```\n\n<a name=\"array.sort\"></a>\n### Array.sort\n\nSorts the Array in ascending order, using one or more iterators specifying which field to compare.  \nFor strings, localCompare is used.  \nThe sort is stable if the browser uses a stable sort (all modern engines do)  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst people = [\n  { name: 'Jesse', creationDate: 2 },\n  { name: 'Walt', creationDate: 1 },\n  { name: 'Mike', creationDate: 4 },\n  { name: 'Skyler', creationDate: 3 }\n]\n\nconst sorted = lift(people)\n  .sort(p => p.creationDate)\n  .map(p => p.name)\n  .value() // ['Walt', 'Jesse', 'Skyler', 'Mike']\n```\n\n<a name=\"array.take\"></a>\n### Array.take\n\nTakes the first 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').take(2).value() // ['1', '2']\n```\n\n<a name=\"array.takeRight\"></a>\n### Array.takeRight\n\nTakes the last 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').takeRight(2).value() // ['2', '3']\n```\n\n<a name=\"array.toSet\"></a>\n### Array.toSet\n\nConverts this Array to a Set.  \n\n```ts\nimport {lift} from 'space-lift'\nconst set = lift(['1', '2', '2', '3').toSet().value() // Set(['1', '2', '3'])\n```\n\n<a name=\"array.update\"></a>\n### Array.update\n\nMake mutable modifications to a draft Array then return a new Array.  \nSee [update](#api.update)  \n\n<a name=\"array.updateAt\"></a>\n### Array.updateAt\n\nUpdates an item at the specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '2', '3').updateAt(1, '20').value() // ['1', '20', '2', '3']\n```\n\n<a name=\"array.pipe\"></a>\n### Array.pipe\n\nPipes this Array with an arbitrary transformation function.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 0, 3]).pipe(Boolean).value() // [true, false, true]\n```\n\n<a name=\"api.object\"></a>\n## Object\n\n* [lift(object)](#lift.object)\n* [add](#object.add)\n* [assoc](#object.assoc)\n* [contains](#object.contains)\n* [dissoc](#object.dissoc)\n* [filter](#object.filter)\n* [get](#object.get)\n* [is](#object.is)\n* [isEmpty](#object.isEmpty)\n* [keys](#object.keys)\n* [mapValues](#object.mapValues)\n* [remove](#object.remove)\n* [set](#object.set)\n* [toArray](#object.toArray)\n* [values](#object.values)\n\nTODO: Detail and examples\n\n<a name=\"api.update\"></a>\n## update\n\n`update` is your go-to function to perfor immutable updates on your `Objects`, `Array`, `Map` and `Set`, using a mutable API. If you know, [immerjs](https://immerjs.github.io/immer/docs/introduction), it's very similar but with different design constraints in mind:  \n\n- Tiny implementation (`space-lift` has a whole is way smaller than `immerjs`)\n- The `Array` draft has special methods to update it as the traditional mutable Array API in JavaScript is awful.\n- Instead of creating tons of costly `Proxies`, they are created only when needed.\n\n\n### update for Array\n\n\n\n\n\n\n<a name=\"api.enum\"></a>\n## createEnum\n\nCreates a type safe string enumeration from a list of strings, providing:  \nthe list of all possible values, an object with all enum keys and the derived type of the enum in a single declaration.\n\n```ts\n  import { createEnum } from 'space-lift/es/enum'\n\n  const enumeration = createEnum('green', 'orange', 'red')\n\n  // We can use the derived type\n  type StopLightColor = typeof enumeration.T\n\n  // We can list all enum values as a Set.\n  enumeration.values // Set(['green', 'orange', 'red'])\n\n  // We can access each value of the enum directly\n  const color = enumeration.enum\n\n  const redish: StopLightColor = 'red'\n  const greenish: StopLightColor = color.green\n  const orange: 'orange' = color.orange\n  orange // 'orange'\n```\n\n<a name=\"api.union\"></a>\n## createUnion\n\nCreates a type-safe union, providing: derived types, factories and type-guards in a single declaration.\n\n```ts\n  import { createUnion } from 'space-lift'\n\n  // Let's take the example of a single input Form that can send a new message or edit an existing one.\n  // createUnion() gives you 3 tools:\n  // T: the derived type for the overall union\n  // is: a typeguard function for each state\n  // Lastly, the returned object has a key acting as a factory for each union member\n  const formState = createUnion({\n    creating: () => ({}),\n    editing: (msgId: string) => ({ msgId }),\n    sendingCreation: () => ({}),\n    sendingUpdate: (msgId: string) => ({ msgId }),\n  });\n\n  // The initial form state is 'creating'\n  let state: typeof formState.T = formState.creating() // { type: 'creating' }\n\n  // If the user wants to edit an existing message, we have to store the edited message id. Lets update our state.\n  onClickEdit(msgId: string) {\n    state = formState.editing(msgId) // { type: 'editing', msgId: 'someId' }\n  }\n\n  // In edition mode, we could want to get the message and change the send button label\n  if (formState.is('editing')(state)) {\n    getMessage(state.msgId) // thanks to the typeguard function, we know msgId is available in the state\n    buttonLabel = 'Update message'\n  }\n\n  // If needed, we can also access the derived type of a given state\n  type EditingType = typeof formState.editing.T\n  const editingObj: EditingType = formState.editing('someId')\n```\n\n\n\n<a name=\"api.result\"></a>\n## Result\n\nA `Result` is the result of a computation that may fail. An `Ok` represents a successful computation, while an `Err` represent the error case.\n\n\n<a name=\"Result\"></a>\n### Importing Result\n\nHere's everything that can be imported to use Results:\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nconst ok = Ok(10) // {ok: true, value: 10}\nconst err = Err('oops') // {ok: false, error: 'oops'}\n```\n\n\n<a name=\"autounwrap\"></a>\n# Auto unwrap\n\nMost of the time, you will have to call `.value()` to read your value back.  \nBecause it's distracting to write `.value()` more than once per chain, some operators will automatically unwrap values returned from their iterators (like Promise->then).\nThese operators are:\n\n- `Array.map`\n- `Array.flatMap`\n- `Array.updateAt`\n- `pipe`","readmeFilename":"README.md","gitHead":"bc903c9fdee3e7b69cbfdeac50671182d2455069","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.11","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Wr86CFhkfFi3to0uM+vV/5W2nuC00aX4izdMNvPu71RGqn1rDALxpoDbqctgYWL9mj+W695zeZzr/yHFBeeelQ==","shasum":"8194f039b684936a68076190639ffba6066d38b6","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.11.tgz","fileCount":50,"unpackedSize":109114,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfv8eDCRA9TVsSAnZWagAAYUUQAKD8BCTzPzQBNWbSA3Yz\n41fJXHnBpmab90OzOZgnk/VK99q9RsLaP4owWRlytvVKp/AjlBHMObIIADFs\nzhDF+X6prU0h4/L6/YEGwjCJvgCt693u2q9Jyg7FKk4XBcUNxW6lj1kbXj8j\nSJGIHmjGhVdZPRPb9NwoZ41axEvnZSCwUtLpKVAY3h3VvRRdxBRxdsnXS3QG\nWONcK/bs5dLHIi545NqoggQgZWHvOekOF0f9RTODpeo1b7HbMM4Zxgf1mwOn\nyTd7QTdO/vSirMHT5WIrKsWmKAKMeB/Nx0/cieOpA4AIhG2o8nL8ozCIA7yB\nIK5anUWE8lz//unl46PVFOpIQPeQhyllJJt0TKxhigWcmjOOLMw7+TAMlt91\nxrEn/Tqww5+cpzJZnNK54llTzDtHUsXkuOky8kNAw76JhRJ6fXspPF5SeFTI\nO/hTH2MXNKqWwwzMjRLRYwWc47KO9CXa7sy5BF3urtwsiCojfgCtemq1MEzz\nacZ+qzMSTIRGu/6b+5JD+XT2bskZrab/IG5NxdZWchS7N5C77Tf1VSgmiQ5m\nfqfoXDikiGGomFNYRnRpR2puypMVFpG0wP0mIW6k3Ihe/DI9yyb0DgIcIRo+\ncgp0JcWPQ5LTiWn6u8pZi2ZnEjTqGvovuwiHdvTvLHvVSpfyKEmUpked36d3\nBNkV\r\n=g4SX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDCXlyzhI2YsDhJnPUN+LiXFhC0CW1u9XbT6KEtBB0H6AiBGPly6OBEmrAVFTluuJN3hSv8TFSpuH3R+pm2cFwoCZg=="}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.11_1606403970588_0.5106368987221752"},"_hasShrinkwrap":false},"1.0.0-beta.12":{"name":"space-lift","version":"1.0.0-beta.12","description":"Idiomatic TypeScript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"readme":"**space-lift**\n\"Lift your values into space for infinite possibilities\"\n\n![](http://i.imgur.com/DWrI2JY.gif?noredirect)\n\nNote: Starting from version `1.0.0`, `space-lift` no longer contains the `Option` and `Result` monads. You can find these at [space-monad](https://github.com/AlexGalays/space-monad)\n\n\n# Rich Array, Object, Map, Set wrapper\n\nDesign goals\n- 100% immutable, no magic, no overwhelming polymorphism or dynamic operators\n- Fun to use\n- Correctness and first-class typescript typings\n- Tiny and performant\n- Small set of functions, configurable with lambdas\n- Cover 95% of frontend data transformation needs without becoming a bloated lib just to cover the remaining 5%\n\n* [How to use](#howtouse)\n* [Examples](#examples)\n* [API](#api)\n  * [Array](#api.array)\n  * [Object](#api.object)\n  * [Map](#api.map)\n  * [Set](#api.set)\n  * [update](#api.update)\n  * [createEnum](#api.enum)\n  * [createUnion](#api.union)\n  * [Result](#api.result)\n* [Auto unwrap](#autounwrap)\n\n\n<a name=\"howtouse\"></a>\n# How to use\n\nHere's everything that can be imported from `space-lift`:\n\n```ts\nimport {\n  lift,\n  update,\n  range,\n  is,\n  createUnion,\n  createEnum,\n  identity,\n  noop,\n  Result,\n  Ok,\n  Err,\n  Immutable\n} from 'space-lift'\n```\n\n- `lift` is the main attraction and is used to wrap an Array, Object, Map or Set to give it extra functionalities  \n- `update` can update an Object, Array, Map or Set without modifying the original  \n- `range` is a factory function for Arrays of numbers  \n- `is` is a helper used to determine if an instance is of a particular type (e.g `is.array([]) === true`)  \n- `createUnion` creates a bunch  of useful things when working with discriminated unions.  \n- `createEnum` creates a bunch of useful things when working with a string based enum.  \n- `identity` the identity function\n- `noop` a function that does nothing\n- `Result`, `Ok`, `Err` are used to work with computation that may fail  \n- `Immutable` a helper type that will recursively make a tree `Readonly`.\n\n\n<a name=\"examples\"></a>\n# Some Examples\n\n## Update an object inside an Array\n\n```ts\nimport { update } from 'space-lift'\n\nconst people = [\n  { id: 1, name: 'jon' },\n  { id: 2, name: 'sarah' },\n  { id: 3, name: 'nina' }\n]\n\nconst updatedPeople = update(people, draft => {\n  draft.updateIf(\n    p => p.id === 2,\n    personDraft => {personDraft.name = 'Nick'})\n})\n```\n\n## Sort on two fields\n\n```ts\nimport lift from 'space-lift'\n\nconst people = [\n  { first: 'jon',   last: 'haggis' },\n  { first: 'sarah', last: 'john' },\n  { first: 'nina',  last: 'pedro' }\n]\n\n// This will create an Array sorted by first name, then by last name\nconst sortedPeople = lift(people)\n  .sort(p => p.first, p => p.last)\n  .value()\n```\n\n<a name=\"api\"></a>\n# API\n\n<a name=\"api.array\"></a>\n## Array\n\n* [clone](#array.clone)\n* [append](#array.append)\n* [appendAll](#array.appendAll)\n* [compact](#array.compact)\n* [count](#array.count)\n* [collect](#array.collect)\n* [distinct](#array.distinct)\n* [drop](#array.drop)\n* [dropRight](#array.dropRight)\n* [filter](#array.filter)\n* [first](#array.first)\n* [flatMap](#array.flatMap)\n* [flatten](#array.flatten)\n* [fold](#array.fold)\n* [get](#array.get)\n* [groupBy](#array.groupBy)\n* [insert](#array.insert)\n* [last](#array.last)\n* [map](#array.map)\n* [removeAt](#array.removeAt)\n* [reverse](#array.reverse)\n* [sort](#array.sort)\n* [take](#array.take)\n* [takeRight](#array.takeRight)\n* [toSet](#array.toSet)\n* [update](#array.update)\n* [updateAt](#array.updateAt)\n* [pipe](#array.pipe)\n\n<a name=\"array.clone\"></a>\n### Array.clone\n\nShallowly clones the Array.\n\n```ts\nimport {lift} from 'space-lift'\nconst cloned = lift([1, 2, 3]).clone().value() // [1, 2, 3]\n```\n\n<a name=\"array.append\"></a>\n### Array.append\n\nAppends one item at the end of the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).append(4).value() // [1, 2, 3, 4]\n```\n\n<a name=\"array.appendAll\"></a>\n### Array.appendAll\n\nAppends an Iterable of items at the end of the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).appendAll([4, 5]).value() // [1, 2, 3, 4, 5]\n```\n\n<a name=\"array.compact\"></a>\n### Array.compact\n\nFilters all the falsy elements out of this Array.  \nAll occurences of false, null, undefined, 0, \"\" will be removed.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, null, 2, 3, undefined]).compact().value() // [1, 2, 3]\n```\n\n<a name=\"array.count\"></a>\n### Array.count\n\nCounts the items satisfying a predicate.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3]).count(n => n > 1) // 2\n```\n\n<a name=\"array.collect\"></a>\n### Array.collect\n\nMaps this Array's items, unless void or undefined is returned, in which case the item is filtered.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3]).collect(n => {\n  if (n === 1) return;\n  return `${n*10}`\n}).value() // ['20', '30']\n```\n\n<a name=\"array.distinct\"></a>\n### Array.distinct\n\nCreates an array without any duplicate item.  \nIf a key function is passed, items will be compared based on the result of that function;  \nif not, they will be compared using strict equality.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst people = [{id: 1, name: 'Alexios'}, {id: 2, name: 'Bob'}, {id: 1, name: 'Alessia'}]\n\n// [{id: 1, name: 'Alexios'}, {id: 2, name: 'Bob'}]\nconst deduped = lift(people).distinct(p => p.id).value()\n```\n\n<a name=\"array.drop\"></a>\n### Array.drop\n\nDrops the first 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).drop(2).value() // [3]\n```\n\n<a name=\"array.dropRight\"></a>\n### Array.dropRight\n\nDrops the last 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).dropRight(2).value() // [1]\n```\n\n<a name=\"array.filter\"></a>\n### Array.filter\n\nFilters this array by aplying a predicate to all items and refine its type.  \n\n```ts\nimport {lift} from 'space-lift'\nconst filtered = lift([1, 2, 3]).filter(n => n > 1).value() // [2, 3]\n```\n\n<a name=\"array.first\"></a>\n### Array.first\n\nReturns the first element in this Array or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst first = lift([1, 2, 3]).first() // 1\n```\n\n<a name=\"array.flatMap\"></a>\n### Array.flatMap\n\nMaps this Array to an Array of Array | ArrayWrapper using a mapper function then flattens it.  \n\n```ts\nimport {lift} from 'space-lift'\nconst mapped = lift([1, 2, 3]).flatMap(n => [n + 1, n + 2]).value() // [2, 3, 3, 4, 4, 5]\n```\n\n<a name=\"array.flatten\"></a>\n### Array.flatten\n\nFlattens this Array of Arrays.  \n\n```ts\nimport {lift} from 'space-lift'\nconst flattened = lift([1, [2], [3, 4]]).flatten().value() // [1, 2, 3, 4]\n```\n\n<a name=\"array.fold\"></a>\n### Array.fold\n\nFolds this Array into a single value, using a starting value.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3).fold(0, (count, n) => count + n) // 6\n```\n\n<a name=\"array.get\"></a>\n### Array.get\n\nReturns the item found at the provided index or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst secondItem = lift([1, 2, 3).get(1) // 2\n```\n\n<a name=\"array.groupBy\"></a>\n### Array.groupBy\n\nCreates a Map where keys are the results of running each element through a discriminator function.  \nThe corresponding value of each key is an array of the elements responsible for generating the key.  \n\n```ts\nimport {lift} from 'space-lift'\nconst people = [\n  { age: 10, name: 'jon' },\n  { age: 30, name: 'momo' },\n  { age: 10, name: 'kiki' },\n  { age: 28, name: 'jesus' },\n  { age: 29, name: 'frank' },\n  { age: 30, name: 'michel' }\n]\n\n// Map<number, Array<{age: number, name: string}>>\nconst peopleByAge = lift(people).groupBy(p => p.age).value()\n```\n\n<a name=\"array.insert\"></a>\n### Array.insert\n\nInserts an item at a specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').insert(1, '20').value() // [1, 20, 2, 3]\n```\n\n<a name=\"array.last\"></a>\n### Array.last\n\nReturns the item found at the last index or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst last = lift(['1', '2', '3').last() // '3'\n```\n\n<a name=\"array.map\"></a>\n### Array.map\n\nMaps this Array using a mapper function.  \n\n```ts\nimport {lift} from 'space-lift'\nconst mapped = lift(['1', '2', '3').map(str => '0' + str).value() // ['01', '02', '03']\n```\n\n<a name=\"array.removeAt\"></a>\n### Array.removeAt\n\nRemoves the item found at the specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').removeAt(1).value() // ['1', '3']\n```\n\n<a name=\"array.reverse\"></a>\n### Array.reverse\n\nReverses the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').reverse().value() // ['3', '2', '1']\n```\n\n<a name=\"array.sort\"></a>\n### Array.sort\n\nSorts the Array in ascending order, using one or more iterators specifying which field to compare.  \nFor strings, localCompare is used.  \nThe sort is stable if the browser uses a stable sort (all modern engines do)  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst people = [\n  { name: 'Jesse', creationDate: 2 },\n  { name: 'Walt', creationDate: 1 },\n  { name: 'Mike', creationDate: 4 },\n  { name: 'Skyler', creationDate: 3 }\n]\n\nconst sorted = lift(people)\n  .sort(p => p.creationDate)\n  .map(p => p.name)\n  .value() // ['Walt', 'Jesse', 'Skyler', 'Mike']\n```\n\n<a name=\"array.take\"></a>\n### Array.take\n\nTakes the first 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').take(2).value() // ['1', '2']\n```\n\n<a name=\"array.takeRight\"></a>\n### Array.takeRight\n\nTakes the last 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').takeRight(2).value() // ['2', '3']\n```\n\n<a name=\"array.toSet\"></a>\n### Array.toSet\n\nConverts this Array to a Set.  \n\n```ts\nimport {lift} from 'space-lift'\nconst set = lift(['1', '2', '2', '3').toSet().value() // Set(['1', '2', '3'])\n```\n\n<a name=\"array.update\"></a>\n### Array.update\n\nMake mutable modifications to a draft Array then return a new Array.  \nSee [update for Array](#update-for-array)  \n\nThe method is also accessible on Array wrappers for convenience:  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst array = [{a: 1}, {a: 2}]\n\nconst updated = lift(array).update(draft => {\n  draft[0].a = 10\n}).value()\n```\n\n<a name=\"array.updateAt\"></a>\n### Array.updateAt\n\nUpdates an item at the specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '2', '3').updateAt(1, '20').value() // ['1', '20', '2', '3']\n```\n\n<a name=\"array.pipe\"></a>\n### Array.pipe\n\nPipes this Array with an arbitrary transformation function.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 0, 3]).pipe(Boolean).value() // [true, false, true]\n```\n\n<a name=\"api.object\"></a>\n## Object\n\n* [lift(object)](#lift.object)\n* [add](#object.add)\n* [assoc](#object.assoc)\n* [contains](#object.contains)\n* [dissoc](#object.dissoc)\n* [filter](#object.filter)\n* [get](#object.get)\n* [is](#object.is)\n* [isEmpty](#object.isEmpty)\n* [keys](#object.keys)\n* [mapValues](#object.mapValues)\n* [remove](#object.remove)\n* [set](#object.set)\n* [toArray](#object.toArray)\n* [values](#object.values)\n\nTODO: Detail and examples\n\n<a name=\"api.update\"></a>\n## update\n\n`update` is your go-to function to perform immutable updates on your `Objects`, `Array`, `Map` and `Set`, using a mutable API. If you know [immerjs](https://immerjs.github.io/immer/docs/introduction), it's very similar (great idea!) but with different design constraints in mind:  \n\n- Tiny implementation (The entirety of `space-lift` is way smaller than `immerjs`)\n- The `Array` draft has special methods to update it as the traditional mutable Array API in JavaScript is awful.\n- Instead of eagerly creating tons of costly `Proxies` (also called `drafts`), they are created only when strictly needed (look for: **will create a draft** in the documentation below).\n- `drafts` are only created for values of type `Object`, `Array`, `Map` or `Set`.\n- `update` should never have a returned value and will prevent it at the type level.\n- Remember that if you iterate through keys, values, etc drafts will **NOT** be created by default. Call one of the draft creating methods within the loop to perform the updates conditionally.\n- As long as you keep accessing drafts, the update can be done at any level of a tree.\n\n### update for Object\n\nAccessing a draft object property is the only `Object` operation that **will create a draft**\n\n#### Adding/updating an Object property\n\n```ts\nimport {update} from 'space-lift'\n\nconst obj: { a: 1; b?: number } = { a: 1 }\n\nconst updated = update(obj, draft => {\n  draft.b = 20\n})\n```\n\n#### Deleting an Object property\n\n```ts\nimport {update} from 'space-lift'\n\nconst obj: { a: 1; b?: number } = { a: 1, b: 20 }\n\nconst updated = update(obj, draft => {\n  delete draft.b\n})\n```\n\n### update for Map\n\nAll regular methods are available.  \n`get` is the only `Map` draft method that **will create a draft** for the returned value.  \n\n#### Map - Updating an existing value\n\n```ts\nimport {update} from 'space-lift'\n\nconst map = new Map([\n  [1, { id: 1, name: 'jon' }],\n  [2, { id: 2, name: 'Julia' }]\n])\n\nconst updated = update(map, draft => {\n  const value = draft.get(2)\n  if (value) return\n  \n  value.name = 'Bob'\n})\n```\n\n### update for Set\n\nAll regular `Set` methods are available.  \nNone of the `Set` draft methods **will create a draft** as a `Set` never hands value over.  \nStill, it's useful to update an immutable `Set` whether it's found nested in a tree or not and Sets are most of the time only useful for primitives values that wouldn't be drafted.  \n\n### update for Array\n\nMost Array methods are available but some are removed to make working with Arrays more pleasant:  \n\n- `splice`: Replaced by `insert`, `removeIf`.\n- `unshift`: Replaced by `preprend`.\n- `shift`: Replaced by `removeIf`.\n- `pop`: Replaced by `removeIf`.\n- `push`: Replaced by `append`.\n- `map` is not removed but `updateIf` is added as the conceptual, mutable equivalent.\n\nAs a result, the interface of a draft Array is not fully compatible with `Array`/`ReadonlyArray` and you must use `toDraft` if you want to assign a regular Array to a draft Array:  \n\n```ts\nimport {update, toDraft} from 'space-lift'\n\nconst updated = update({arr: [1, 2, 3]}, draft => {\n  draft.arr = toDraft([4, 5, 6])\n})\n```\n\n- Accessing an Array element by index **will create a draft** (be careful with this if you somehow end up manually iterating the Array)\n- `updateIf` **will create a draft** for each item satisfying its predicate.  \n\n#### Array - using updateIf\n\n```ts\nimport {update} from 'space-lift'\n\nconst arr = [\n  { id: 1, name: 'Jon' },\n  { id: 3, name: 'Julia' }\n]\n\nconst updated = update(arr, draft => {\n  draft.updateIf(\n    (item, index) => item.id === 3,\n    item => {\n      item.name = 'Bob'\n    }\n  )\n})\n```\n\n<a name=\"api.enum\"></a>\n## createEnum\n\nCreates a type safe string enumeration from a list of strings, providing:  \nthe list of all possible values, an object with all enum keys and the derived type of the enum in a single declaration.\n\n```ts\n  import { createEnum } from 'space-lift/es/enum'\n\n  const enumeration = createEnum('green', 'orange', 'red')\n\n  // We can use the derived type\n  type StopLightColor = typeof enumeration.T\n\n  // We can list all enum values as a Set.\n  enumeration.values // Set(['green', 'orange', 'red'])\n\n  // We can access each value of the enum directly\n  const color = enumeration.enum\n\n  const redish: StopLightColor = 'red'\n  const greenish: StopLightColor = color.green\n  const orange: 'orange' = color.orange\n  orange // 'orange'\n```\n\n<a name=\"api.union\"></a>\n## createUnion\n\nCreates a type-safe union, providing: derived types, factories and type-guards in a single declaration.\n\n```ts\n  import { createUnion } from 'space-lift'\n\n  // Let's take the example of a single input Form that can send a new message or edit an existing one.\n  // createUnion() gives you 3 tools:\n  // T: the derived type for the overall union\n  // is: a typeguard function for each state\n  // Lastly, the returned object has a key acting as a factory for each union member\n  const formState = createUnion({\n    creating: () => ({}),\n    editing: (msgId: string) => ({ msgId }),\n    sendingCreation: () => ({}),\n    sendingUpdate: (msgId: string) => ({ msgId }),\n  });\n\n  // The initial form state is 'creating'\n  let state: typeof formState.T = formState.creating() // { type: 'creating' }\n\n  // If the user wants to edit an existing message, we have to store the edited message id. Lets update our state.\n  onClickEdit(msgId: string) {\n    state = formState.editing(msgId) // { type: 'editing', msgId: 'someId' }\n  }\n\n  // In edition mode, we could want to get the message and change the send button label\n  if (formState.is('editing')(state)) {\n    getMessage(state.msgId) // thanks to the typeguard function, we know msgId is available in the state\n    buttonLabel = 'Update message'\n  }\n\n  // If needed, we can also access the derived type of a given state\n  type EditingType = typeof formState.editing.T\n  const editingObj: EditingType = formState.editing('someId')\n```\n\n\n\n<a name=\"api.result\"></a>\n## Result\n\nA `Result` is the result of a computation that may fail. An `Ok` represents a successful computation, while an `Err` represent the error case.\n\n\n<a name=\"Result\"></a>\n### Importing Result\n\nHere's everything that can be imported to use Results:\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nconst ok = Ok(10) // {ok: true, value: 10}\nconst err = Err('oops') // {ok: false, error: 'oops'}\n```\n\n\n<a name=\"autounwrap\"></a>\n# Auto unwrap\n\nMost of the time, you will have to call `.value()` to read your value back.  \nBecause it's distracting to write `.value()` more than once per chain, some operators will automatically unwrap values returned from their iterators (like Promise->then).\nThese operators are:\n\n- `Array.map`\n- `Array.flatMap`\n- `Array.updateAt`\n- `pipe`","readmeFilename":"README.md","gitHead":"fa4e6b5f7f83d115b1569b762a25c1471d81253f","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.12","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JtykFF3CI+IvCGEMOjdxgj13ADyUeHa0DamICj54zqNGS+Ym2Qi1G3LbC3yODkizC52g/IhHp66lKJvXxWB8Qg==","shasum":"50b96cf64d6aaeccc8a1c50c1b489fde6d205202","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.12.tgz","fileCount":50,"unpackedSize":113946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx/J1CRA9TVsSAnZWagAAuQAP/RNTQBc4D1TKG52PHlUh\nMoPPTLBTOc/3UhIhnleGEMgYMZ9jl9RIoU75Jcl8p/SXussdA1oCYupBfuze\nbSR1O0cdDY+YC0fWEm9mIZnUkIATYZWDOznHd6Q2cH65lO8bmVHsi4OBvReG\nac6aaeFnImawbV4Xp+Jie1+5Qcr9A4DiZNany1y6vNqANVa76LjittSbt21m\neF3kYNHOQrLkNXFbARtHvZTXbKe0SatmSlXUs2FJjmbjES32xldEMZ5rCt7m\nVQYxZTRvYAFlpUBJ4ja1xDHVBKAtpg5LSg1dzBI6BUgbkL0O45hMNaSwSE4h\naa3akmBjOaVVE61oCUWL1FPxLzyYXhN2tviEdbOKkDL96s/i0d/FMPg2iQf2\nCCp//jQTmuh/z5qP0IRk9PGhv+eqGD408fMXQOrVexEPAhzNoh2rHhP2PUmI\neHqpdRk0BJLQdgpgClSW9JaI2TcM4AskVWIsZgFI1Sqs9C16u8uuNkism4Kz\n+aQxTlWIE2M9cCPM94nFmwMRV9SyjZcFJnAyKGanCjPonO2Y6sqRtZpL+tok\nEXapMKllsYRAt7beqEiFe9vGlV7exBOoHQBMLvsZd8IhE3dgmctv6iSWMa8s\nymJzfVWpjRyNNawmU4RJ9QcFZ26XWkOsQAZJq4ecbsxO03DF+C1ahc3b0sBI\njHhE\r\n=f4SE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGmHxVMfcJ8lpKdP3GbDk4ZHAXeM/+0vTSc3MSHWvGfXAiEAuudBSbRm/+sxxyffz36DyISqMaOVSh2C0d8Br/Gr4MI="}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.12_1606939253350_0.8378965053748497"},"_hasShrinkwrap":false},"1.0.0-beta.13":{"name":"space-lift","version":"1.0.0-beta.13","description":"Idiomatic TypeScript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"readme":"**space-lift**\n\"Lift your values into space for infinite possibilities\"\n\n![](http://i.imgur.com/DWrI2JY.gif?noredirect)\n\nNote: Starting from version `1.0.0`, `space-lift` no longer contains the `Option` and `Result` monads. You can find these at [space-monad](https://github.com/AlexGalays/space-monad)\n\n\n# Rich Array, Object, Map, Set wrapper\n\nDesign goals\n- 100% immutable, no magic, no overwhelming polymorphism or dynamic operators\n- Fun to use\n- Correctness and first-class typescript typings\n- Tiny and performant\n- Small set of functions, configurable with lambdas\n- Cover 95% of frontend data transformation needs without becoming a bloated lib just to cover the remaining 5%\n\n* [How to use](#howtouse)\n* [Examples](#examples)\n* [API](#api)\n  * [Array](#api.array)\n  * [Object](#api.object)\n  * [Map](#api.map)\n  * [Set](#api.set)\n  * [update](#api.update)\n  * [createEnum](#api.enum)\n  * [createUnion](#api.union)\n  * [Result](#api.result)\n* [Auto unwrap](#autounwrap)\n\n\n<a name=\"howtouse\"></a>\n# How to use\n\nHere's everything that can be imported from `space-lift`:\n\n```ts\nimport {\n  lift,\n  update,\n  range,\n  is,\n  createUnion,\n  createEnum,\n  identity,\n  noop,\n  Result,\n  Ok,\n  Err,\n  Immutable\n} from 'space-lift'\n```\n\n- `lift` is the main attraction and is used to wrap an Array, Object, Map or Set to give it extra functionalities  \n- `update` can update an Object, Array, Map or Set without modifying the original  \n- `range` is a factory function for Arrays of numbers  \n- `is` is a helper used to determine if an instance is of a particular type (e.g `is.array([]) === true`)  \n- `createUnion` creates a bunch  of useful things when working with discriminated unions.  \n- `createEnum` creates a bunch of useful things when working with a string based enum.  \n- `identity` the identity function\n- `noop` a function that does nothing\n- `Result`, `Ok`, `Err` are used to work with computation that may fail  \n- `Immutable` a helper type that will recursively make a tree `Readonly`.\n\n\n<a name=\"examples\"></a>\n# Some Examples\n\n## Update an object inside an Array\n\n```ts\nimport { update } from 'space-lift'\n\nconst people = [\n  { id: 1, name: 'jon' },\n  { id: 2, name: 'sarah' },\n  { id: 3, name: 'nina' }\n]\n\nconst updatedPeople = update(people, draft => {\n  draft.updateIf(\n    p => p.id === 2,\n    personDraft => {personDraft.name = 'Nick'})\n})\n```\n\n## Sort on two fields\n\n```ts\nimport lift from 'space-lift'\n\nconst people = [\n  { first: 'jon',   last: 'haggis' },\n  { first: 'sarah', last: 'john' },\n  { first: 'nina',  last: 'pedro' }\n]\n\n// This will create an Array sorted by first name, then by last name\nconst sortedPeople = lift(people)\n  .sort(p => p.first, p => p.last)\n  .value()\n```\n\n<a name=\"api\"></a>\n# API\n\n<a name=\"api.array\"></a>\n## Array\n\n* [clone](#array.clone)\n* [append](#array.append)\n* [appendAll](#array.appendAll)\n* [compact](#array.compact)\n* [count](#array.count)\n* [collect](#array.collect)\n* [distinct](#array.distinct)\n* [drop](#array.drop)\n* [dropRight](#array.dropRight)\n* [filter](#array.filter)\n* [first](#array.first)\n* [flatMap](#array.flatMap)\n* [flatten](#array.flatten)\n* [fold](#array.fold)\n* [get](#array.get)\n* [groupBy](#array.groupBy)\n* [insert](#array.insert)\n* [last](#array.last)\n* [map](#array.map)\n* [removeAt](#array.removeAt)\n* [reverse](#array.reverse)\n* [sort](#array.sort)\n* [take](#array.take)\n* [takeRight](#array.takeRight)\n* [toSet](#array.toSet)\n* [update](#array.update)\n* [updateAt](#array.updateAt)\n* [pipe](#array.pipe)\n\n<a name=\"array.clone\"></a>\n### Array.clone\n\nShallowly clones the Array.\n\n```ts\nimport {lift} from 'space-lift'\nconst cloned = lift([1, 2, 3]).clone().value() // [1, 2, 3]\n```\n\n<a name=\"array.append\"></a>\n### Array.append\n\nAppends one item at the end of the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).append(4).value() // [1, 2, 3, 4]\n```\n\n<a name=\"array.appendAll\"></a>\n### Array.appendAll\n\nAppends an Iterable of items at the end of the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).appendAll([4, 5]).value() // [1, 2, 3, 4, 5]\n```\n\n<a name=\"array.compact\"></a>\n### Array.compact\n\nFilters all the falsy elements out of this Array.  \nAll occurences of false, null, undefined, 0, \"\" will be removed.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, null, 2, 3, undefined]).compact().value() // [1, 2, 3]\n```\n\n<a name=\"array.count\"></a>\n### Array.count\n\nCounts the items satisfying a predicate.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3]).count(n => n > 1) // 2\n```\n\n<a name=\"array.collect\"></a>\n### Array.collect\n\nMaps this Array's items, unless void or undefined is returned, in which case the item is filtered.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3]).collect(n => {\n  if (n === 1) return;\n  return `${n*10}`\n}).value() // ['20', '30']\n```\n\n<a name=\"array.distinct\"></a>\n### Array.distinct\n\nCreates an array without any duplicate item.  \nIf a key function is passed, items will be compared based on the result of that function;  \nif not, they will be compared using strict equality.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst people = [{id: 1, name: 'Alexios'}, {id: 2, name: 'Bob'}, {id: 1, name: 'Alessia'}]\n\n// [{id: 1, name: 'Alexios'}, {id: 2, name: 'Bob'}]\nconst deduped = lift(people).distinct(p => p.id).value()\n```\n\n<a name=\"array.drop\"></a>\n### Array.drop\n\nDrops the first 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).drop(2).value() // [3]\n```\n\n<a name=\"array.dropRight\"></a>\n### Array.dropRight\n\nDrops the last 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).dropRight(2).value() // [1]\n```\n\n<a name=\"array.filter\"></a>\n### Array.filter\n\nFilters this array by aplying a predicate to all items and refine its type.  \n\n```ts\nimport {lift} from 'space-lift'\nconst filtered = lift([1, 2, 3]).filter(n => n > 1).value() // [2, 3]\n```\n\n<a name=\"array.first\"></a>\n### Array.first\n\nReturns the first element in this Array or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst first = lift([1, 2, 3]).first() // 1\n```\n\n<a name=\"array.flatMap\"></a>\n### Array.flatMap\n\nMaps this Array to an Array of Array | ArrayWrapper using a mapper function then flattens it.  \n\n```ts\nimport {lift} from 'space-lift'\nconst mapped = lift([1, 2, 3]).flatMap(n => [n + 1, n + 2]).value() // [2, 3, 3, 4, 4, 5]\n```\n\n<a name=\"array.flatten\"></a>\n### Array.flatten\n\nFlattens this Array of Arrays.  \n\n```ts\nimport {lift} from 'space-lift'\nconst flattened = lift([1, [2], [3, 4]]).flatten().value() // [1, 2, 3, 4]\n```\n\n<a name=\"array.fold\"></a>\n### Array.fold\n\nFolds this Array into a single value, using a starting value.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3).fold(0, (count, n) => count + n) // 6\n```\n\n<a name=\"array.get\"></a>\n### Array.get\n\nReturns the item found at the provided index or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst secondItem = lift([1, 2, 3).get(1) // 2\n```\n\n<a name=\"array.groupBy\"></a>\n### Array.groupBy\n\nCreates a Map where keys are the results of running each element through a discriminator function.  \nThe corresponding value of each key is an array of the elements responsible for generating the key.  \n\n```ts\nimport {lift} from 'space-lift'\nconst people = [\n  { age: 10, name: 'jon' },\n  { age: 30, name: 'momo' },\n  { age: 10, name: 'kiki' },\n  { age: 28, name: 'jesus' },\n  { age: 29, name: 'frank' },\n  { age: 30, name: 'michel' }\n]\n\n// Map<number, Array<{age: number, name: string}>>\nconst peopleByAge = lift(people).groupBy(p => p.age).value()\n```\n\n<a name=\"array.insert\"></a>\n### Array.insert\n\nInserts an item at a specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').insert(1, '20').value() // [1, 20, 2, 3]\n```\n\n<a name=\"array.last\"></a>\n### Array.last\n\nReturns the item found at the last index or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst last = lift(['1', '2', '3').last() // '3'\n```\n\n<a name=\"array.map\"></a>\n### Array.map\n\nMaps this Array using a mapper function.  \n\n```ts\nimport {lift} from 'space-lift'\nconst mapped = lift(['1', '2', '3').map(str => '0' + str).value() // ['01', '02', '03']\n```\n\n<a name=\"array.removeAt\"></a>\n### Array.removeAt\n\nRemoves the item found at the specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').removeAt(1).value() // ['1', '3']\n```\n\n<a name=\"array.reverse\"></a>\n### Array.reverse\n\nReverses the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').reverse().value() // ['3', '2', '1']\n```\n\n<a name=\"array.sort\"></a>\n### Array.sort\n\nSorts the Array in ascending order, using one or more iterators specifying which field to compare.  \nFor strings, localCompare is used.  \nThe sort is stable if the browser uses a stable sort (all modern engines do)  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst people = [\n  { name: 'Jesse', creationDate: 2 },\n  { name: 'Walt', creationDate: 1 },\n  { name: 'Mike', creationDate: 4 },\n  { name: 'Skyler', creationDate: 3 }\n]\n\nconst sorted = lift(people)\n  .sort(p => p.creationDate)\n  .map(p => p.name)\n  .value() // ['Walt', 'Jesse', 'Skyler', 'Mike']\n```\n\n<a name=\"array.take\"></a>\n### Array.take\n\nTakes the first 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').take(2).value() // ['1', '2']\n```\n\n<a name=\"array.takeRight\"></a>\n### Array.takeRight\n\nTakes the last 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').takeRight(2).value() // ['2', '3']\n```\n\n<a name=\"array.toSet\"></a>\n### Array.toSet\n\nConverts this Array to a Set.  \n\n```ts\nimport {lift} from 'space-lift'\nconst set = lift(['1', '2', '2', '3').toSet().value() // Set(['1', '2', '3'])\n```\n\n<a name=\"array.update\"></a>\n### Array.update\n\nMake mutable modifications to a draft Array then return a new Array.  \nSee [update for Array](#update-for-array)  \n\nThe method is also accessible on Array wrappers for convenience:  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst array = [{a: 1}, {a: 2}]\n\nconst updated = lift(array).update(draft => {\n  draft[0].a = 10\n}).value()\n```\n\n<a name=\"array.updateAt\"></a>\n### Array.updateAt\n\nUpdates an item at the specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '2', '3').updateAt(1, '20').value() // ['1', '20', '2', '3']\n```\n\n<a name=\"array.pipe\"></a>\n### Array.pipe\n\nPipes this Array with an arbitrary transformation function.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 0, 3]).pipe(Boolean).value() // [true, false, true]\n```\n\n<a name=\"api.object\"></a>\n## Object\n\n* [lift(object)](#lift.object)\n* [add](#object.add)\n* [assoc](#object.assoc)\n* [contains](#object.contains)\n* [dissoc](#object.dissoc)\n* [filter](#object.filter)\n* [get](#object.get)\n* [is](#object.is)\n* [isEmpty](#object.isEmpty)\n* [keys](#object.keys)\n* [mapValues](#object.mapValues)\n* [remove](#object.remove)\n* [set](#object.set)\n* [toArray](#object.toArray)\n* [values](#object.values)\n\nTODO: Detail and examples\n\n<a name=\"api.update\"></a>\n## update\n\n`update` is your go-to function to perform immutable updates on your `Objects`, `Array`, `Map` and `Set`, using a mutable API. If you know [immerjs](https://immerjs.github.io/immer/docs/introduction), it's very similar (great idea!) but with different design constraints in mind:  \n\n- Tiny implementation (The entirety of `space-lift` is way smaller than `immerjs`)\n- The `Array` draft has special methods to update it as the traditional mutable Array API in JavaScript is awful.\n- Instead of eagerly creating tons of costly `Proxies` (also called `drafts`), they are created only when strictly needed (look for: **will create a draft** in the documentation below).\n- `drafts` are only created for values of type `Object`, `Array`, `Map` or `Set`.\n- `update` should never have a returned value and will prevent it at the type level.\n- Remember that if you iterate through keys, values, etc drafts will **NOT** be created by default. Call one of the draft creating methods within the loop to perform the updates conditionally.\n- As long as you keep accessing drafts, the update can be done at any level of a tree.\n\n### update for Object\n\nAccessing a draft object property is the only `Object` operation that **will create a draft**\n\n#### Adding/updating an Object property\n\n```ts\nimport {update} from 'space-lift'\n\nconst obj: { a: 1; b?: number } = { a: 1 }\n\nconst updated = update(obj, draft => {\n  draft.b = 20\n})\n```\n\n#### Deleting an Object property\n\n```ts\nimport {update} from 'space-lift'\n\nconst obj: { a: 1; b?: number } = { a: 1, b: 20 }\n\nconst updated = update(obj, draft => {\n  delete draft.b\n})\n```\n\n### update for Map\n\nAll regular methods are available.  \n`get` is the only `Map` draft method that **will create a draft** for the returned value.  \n\n#### Map - Updating an existing value\n\n```ts\nimport {update} from 'space-lift'\n\nconst map = new Map([\n  [1, { id: 1, name: 'jon' }],\n  [2, { id: 2, name: 'Julia' }]\n])\n\nconst updated = update(map, draft => {\n  const value = draft.get(2)\n  if (value) return\n  \n  value.name = 'Bob'\n})\n```\n\n### update for Set\n\nAll regular `Set` methods are available.  \nNone of the `Set` draft methods **will create a draft** as a `Set` never hands value over.  \nStill, it's useful to update an immutable `Set` whether it's found nested in a tree or not and Sets are most of the time only useful for primitives values that wouldn't be drafted.  \n\n### update for Array\n\nMost Array methods are available but some are removed to make working with Arrays more pleasant:  \n\n- `splice`: Replaced by `insert`, `removeIf`.\n- `unshift`: Replaced by `preprend`.\n- `shift`: Replaced by `removeIf`.\n- `pop`: Replaced by `removeIf`.\n- `push`: Replaced by `append`.\n- `map` is not removed but `updateIf` is added as the conceptual, mutable equivalent.\n\nAs a result, the interface of a draft Array is not fully compatible with `Array`/`ReadonlyArray` and you must use `toDraft` if you want to assign a regular Array to a draft Array:  \n\n```ts\nimport {update, toDraft} from 'space-lift'\n\nconst updated = update({arr: [1, 2, 3]}, draft => {\n  draft.arr = toDraft([4, 5, 6])\n})\n```\n\n- Accessing an Array element by index **will create a draft** (be careful with this if you somehow end up manually iterating the Array)\n- `updateIf` **will create a draft** for each item satisfying its predicate.  \n\n#### Array - using updateIf\n\n```ts\nimport {update} from 'space-lift'\n\nconst arr = [\n  { id: 1, name: 'Jon' },\n  { id: 3, name: 'Julia' }\n]\n\nconst updated = update(arr, draft => {\n  draft.updateIf(\n    (item, index) => item.id === 3,\n    item => {\n      item.name = 'Bob'\n    }\n  )\n})\n```\n\n<a name=\"api.enum\"></a>\n## createEnum\n\nCreates a type safe string enumeration from a list of strings, providing:  \nthe list of all possible values, an object with all enum keys and the derived type of the enum in a single declaration.\n\n```ts\n  import { createEnum } from 'space-lift/es/enum'\n\n  const enumeration = createEnum('green', 'orange', 'red')\n\n  // We can use the derived type\n  type StopLightColor = typeof enumeration.T\n\n  // We can list all enum values as a Set.\n  enumeration.values // Set(['green', 'orange', 'red'])\n\n  // We can access each value of the enum directly\n  const color = enumeration.enum\n\n  const redish: StopLightColor = 'red'\n  const greenish: StopLightColor = color.green\n  const orange: 'orange' = color.orange\n  orange // 'orange'\n```\n\n<a name=\"api.union\"></a>\n## createUnion\n\nCreates a type-safe union, providing: derived types, factories and type-guards in a single declaration.\n\n```ts\n  import { createUnion } from 'space-lift'\n\n  // Let's take the example of a single input Form that can send a new message or edit an existing one.\n  // createUnion() gives you 3 tools:\n  // T: the derived type for the overall union\n  // is: a typeguard function for each state\n  // Lastly, the returned object has a key acting as a factory for each union member\n  const formState = createUnion({\n    creating: () => ({}),\n    editing: (msgId: string) => ({ msgId }),\n    sendingCreation: () => ({}),\n    sendingUpdate: (msgId: string) => ({ msgId }),\n  });\n\n  // The initial form state is 'creating'\n  let state: typeof formState.T = formState.creating() // { type: 'creating' }\n\n  // If the user wants to edit an existing message, we have to store the edited message id. Lets update our state.\n  onClickEdit(msgId: string) {\n    state = formState.editing(msgId) // { type: 'editing', msgId: 'someId' }\n  }\n\n  // In edition mode, we could want to get the message and change the send button label\n  if (formState.is('editing')(state)) {\n    getMessage(state.msgId) // thanks to the typeguard function, we know msgId is available in the state\n    buttonLabel = 'Update message'\n  }\n\n  // If needed, we can also access the derived type of a given state\n  type EditingType = typeof formState.editing.T\n  const editingObj: EditingType = formState.editing('someId')\n```\n\n\n\n<a name=\"api.result\"></a>\n## Result\n\nA `Result` is the result of a computation that may fail. An `Ok` represents a successful computation, while an `Err` represent the error case.\n\n\n<a name=\"Result\"></a>\n### Importing Result\n\nHere's everything that can be imported to use Results:\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nconst ok = Ok(10) // {ok: true, value: 10}\nconst err = Err('oops') // {ok: false, error: 'oops'}\n```\n\n\n<a name=\"autounwrap\"></a>\n# Auto unwrap\n\nMost of the time, you will have to call `.value()` to read your value back.  \nBecause it's distracting to write `.value()` more than once per chain, some operators will automatically unwrap values returned from their iterators (like Promise->then).\nThese operators are:\n\n- `Array.map`\n- `Array.flatMap`\n- `Array.updateAt`\n- `pipe`","readmeFilename":"README.md","gitHead":"c756a9bdd611eaa5cf6507486d9eea40fb90f6d7","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.13","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JbgEPUpixNofHZ/8jX5XsW9P8Mr0gAXfe64sp/GPfQkNXV8jNDHqe3P0bubc/bKH3+KTNmfXe7mMjd9CpQL5Iw==","shasum":"12bcad115bd9ab5401cb9b037ec3f5d04de8d67e","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.13.tgz","fileCount":50,"unpackedSize":113194,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0QMMCRA9TVsSAnZWagAANooQAIAbwMbpcjGhEPHVtFuv\njhIWJoDN4DQnTzYphr9/oqHZXdYJwEGwslgympwsu8Ha5UwI0PtDK3ciV0jW\nf/z+O1b2cOtpoeKztj8CgmNVg50JUsdzB/HsG6La+6bpuNgSa+Uy2mApK2/Q\nFOc9Ti2JdcECQU/2qIn4hFfyDx6BuCAdg/nq7qgO03bKNuX/rReNdM/10JPO\nBlYflhKhhTM12tOUZaM3JNvvhTWGdqSM7iq+ePenuAeORA6sTfq55pGTXoQY\nTZqYEhTdvsr0syYsmWuv9rF439CzTR4o8GQUfEmEGBP2Ua19mTZkv2RxsPGN\nmgNUlRTWbFaL2U16u+6Ox5+itxpwebxPJ9DCqPganqNBxFvkRg9DLaI7gWV+\nak2rHwwaVmh3+8NQigaUVYqYieD683ZVcokuuxyM9xdBV6maaUaandcuQ938\nRH4lATc6k32YhkaNWedvXKbYPmaqAAQwE+FLvv611XoS18jPgEPL9ft1RbRM\n3IJP0vC+YVfNLDngxi27Uu+xATZug8RhxYtYUzjgpUHpE4rSNgGIb0BxHKRd\nJ6k6OzYsWqzjLdBJHqPN0bz6LLl05sWt1bcVSYU8JOprWzskhkcuGnduwM4S\n9zSugETxm9ZiTysZ34Vpm2OxmvwbUypRz/8wuWDihD8jRrYs3Ai2X4fP1Jsb\n/OKq\r\n=jAOT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6dxLs3OS2RmvzmRaScqF9o2vXQh7fGwRKBY1JfmNNFwIhAL3k6+/RX3qcDazuBfJmzmC4X+8Jr5PIV7RHbdyeJ7r5"}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.13_1607533324358_0.9457840223647489"},"_hasShrinkwrap":false},"1.0.0-beta.14":{"name":"space-lift","version":"1.0.0-beta.14","description":"Idiomatic TypeScript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Pap","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"readme":"**space-lift**\n\"Lift your values into space for infinite possibilities\"\n\n![](http://i.imgur.com/DWrI2JY.gif?noredirect)\n\nNote: Starting from version `1.0.0`, `space-lift` no longer contains the `Option` and `Result` monads. You can find these at [space-monad](https://github.com/AlexGalays/space-monad)\n\n\n# Rich Array, Object, Map, Set wrapper\n\nDesign goals\n- 100% immutable, no magic, no overwhelming polymorphism or dynamic operators\n- Fun to use\n- Correctness and first-class typescript typings\n- Tiny and performant (`space-lift` weights `8.2 kB` minified for roughly the same scope as `lodash` (`70.0 kB`) AND `immerjs` (`15.6 kB`)) and no amount of tree shaking can save you from heavy abstractions imported by all modules.  \n- Small set of functions, configurable with lambdas\n- Cover 95% of frontend data transformation needs without becoming a bloated lib just to cover the remaining 5%\n\n![spacelift lib size](https://user-images.githubusercontent.com/5928836/101669317-0923c300-3a52-11eb-89b7-1b607f7a243b.png)\n\n* [How to use](#howtouse)\n* [Examples](#examples)\n* [API](#api)\n  * [Array](#api.array)\n  * [Object](#api.object)\n  * [Map](#api.map)\n  * [Set](#api.set)\n  * [update](#api.update)\n  * [createEnum](#api.enum)\n  * [createUnion](#api.union)\n  * [Result](#api.result)\n* [Auto unwrap](#autounwrap)\n\n\n<a name=\"howtouse\"></a>\n# How to use\n\nHere's everything that can be imported from `space-lift`:\n\n```ts\nimport {\n  lift,\n  update,\n  range,\n  is,\n  createUnion,\n  createEnum,\n  identity,\n  noop,\n  Result,\n  Ok,\n  Err,\n  Immutable\n} from 'space-lift'\n```\n\n- `lift` is the main attraction and is used to wrap an Array, Object, Map or Set to give it extra functionalities  \n- `update` can update an Object, Array, Map or Set without modifying the original  \n- `range` is a factory function for Arrays of numbers  \n- `is` is a helper used to determine if an instance is of a particular type (e.g `is.array([]) === true`)  \n- `createUnion` creates a bunch  of useful things when working with discriminated unions.  \n- `createEnum` creates a bunch of useful things when working with a string based enum.  \n- `identity` the identity function\n- `noop` a function that does nothing\n- `Result`, `Ok`, `Err` are used to work with computation that may fail  \n- `Immutable` a helper type that will recursively make a tree `Readonly`.\n\n\n<a name=\"examples\"></a>\n# Some Examples\n\n## Update an object inside an Array\n\n```ts\nimport { update } from 'space-lift'\n\nconst people = [\n  { id: 1, name: 'jon' },\n  { id: 2, name: 'sarah' },\n  { id: 3, name: 'nina' }\n]\n\nconst updatedPeople = update(people, draft => {\n  draft.updateIf(\n    p => p.id === 2,\n    personDraft => {personDraft.name = 'Nick'})\n})\n```\n\n## Sort on two fields\n\n```ts\nimport lift from 'space-lift'\n\nconst people = [\n  { first: 'jon',   last: 'haggis' },\n  { first: 'sarah', last: 'john' },\n  { first: 'nina',  last: 'pedro' }\n]\n\n// This will create an Array sorted by first name, then by last name\nconst sortedPeople = lift(people)\n  .sort(p => p.first, p => p.last)\n  .value()\n```\n\n<a name=\"api\"></a>\n# API\n\n<a name=\"api.array\"></a>\n## Array\n\n* [append](#array.append)\n* [appendAll](#array.appendAll)\n* [compact](#array.compact)\n* [count](#array.count)\n* [collect](#array.collect)\n* [distinct](#array.distinct)\n* [drop](#array.drop)\n* [dropRight](#array.dropRight)\n* [filter](#array.filter)\n* [first](#array.first)\n* [flatMap](#array.flatMap)\n* [flatten](#array.flatten)\n* [reduce](#array.reduce)\n* [get](#array.get)\n* [groupBy](#array.groupBy)\n* [insert](#array.insert)\n* [last](#array.last)\n* [map](#array.map)\n* [removeAt](#array.removeAt)\n* [reverse](#array.reverse)\n* [sort](#array.sort)\n* [take](#array.take)\n* [takeRight](#array.takeRight)\n* [toSet](#array.toSet)\n* [update](#array.update)\n* [updateAt](#array.updateAt)\n* [pipe](#array.pipe)\n\n\n<a name=\"array.append\"></a>\n### Array.append\n\nAppends one item at the end of the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).append(4).value() // [1, 2, 3, 4]\n```\n\n<a name=\"array.appendAll\"></a>\n### Array.appendAll\n\nAppends an Iterable of items at the end of the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).appendAll([4, 5]).value() // [1, 2, 3, 4, 5]\n```\n\n<a name=\"array.compact\"></a>\n### Array.compact\n\nFilters all the falsy elements out of this Array.  \nAll occurences of false, null, undefined, 0, \"\" will be removed.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, null, 2, 3, undefined]).compact().value() // [1, 2, 3]\n```\n\n<a name=\"array.count\"></a>\n### Array.count\n\nCounts the items satisfying a predicate.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3]).count(n => n > 1) // 2\n```\n\n<a name=\"array.collect\"></a>\n### Array.collect\n\nMaps this Array's items, unless void or undefined is returned, in which case the item is filtered.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3]).collect(n => {\n  if (n === 1) return;\n  return `${n*10}`\n}).value() // ['20', '30']\n```\n\n<a name=\"array.distinct\"></a>\n### Array.distinct\n\nCreates an array without any duplicate item.  \nIf a key function is passed, items will be compared based on the result of that function;  \nif not, they will be compared using strict equality.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst people = [{id: 1, name: 'Alexios'}, {id: 2, name: 'Bob'}, {id: 1, name: 'Alessia'}]\n\n// [{id: 1, name: 'Alexios'}, {id: 2, name: 'Bob'}]\nconst deduped = lift(people).distinct(p => p.id).value()\n```\n\n<a name=\"array.drop\"></a>\n### Array.drop\n\nDrops the first 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).drop(2).value() // [3]\n```\n\n<a name=\"array.dropRight\"></a>\n### Array.dropRight\n\nDrops the last 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).dropRight(2).value() // [1]\n```\n\n<a name=\"array.filter\"></a>\n### Array.filter\n\nFilters this array by aplying a predicate to all items and refine its type.  \n\n```ts\nimport {lift} from 'space-lift'\nconst filtered = lift([1, 2, 3]).filter(n => n > 1).value() // [2, 3]\n```\n\n<a name=\"array.first\"></a>\n### Array.first\n\nReturns the first element in this Array or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst first = lift([1, 2, 3]).first() // 1\n```\n\n<a name=\"array.flatMap\"></a>\n### Array.flatMap\n\nMaps this Array to an Array of Array | ArrayWrapper using a mapper function then flattens it.  \n\n```ts\nimport {lift} from 'space-lift'\nconst mapped = lift([1, 2, 3]).flatMap(n => [n + 1, n + 2]).value() // [2, 3, 3, 4, 4, 5]\n```\n\n<a name=\"array.flatten\"></a>\n### Array.flatten\n\nFlattens this Array of Arrays.  \n\n```ts\nimport {lift} from 'space-lift'\nconst flattened = lift([1, [2], [3, 4]]).flatten().value() // [1, 2, 3, 4]\n```\n\n<a name=\"array.reduce\"></a>\n### Array.reduce\n\nReduces this Array into a single value, using a starting value.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3).reduce(0, (count, n) => count + n) // 6\n```\n\n<a name=\"array.get\"></a>\n### Array.get\n\nReturns the item found at the provided index or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst secondItem = lift([1, 2, 3).get(1) // 2\n```\n\n<a name=\"array.groupBy\"></a>\n### Array.groupBy\n\nCreates a Map where keys are the results of running each element through a discriminator function.  \nThe corresponding value of each key is an array of the elements responsible for generating the key.  \n\n```ts\nimport {lift} from 'space-lift'\nconst people = [\n  { age: 10, name: 'jon' },\n  { age: 30, name: 'momo' },\n  { age: 10, name: 'kiki' },\n  { age: 28, name: 'jesus' },\n  { age: 29, name: 'frank' },\n  { age: 30, name: 'michel' }\n]\n\n// Map<number, Array<{age: number, name: string}>>\nconst peopleByAge = lift(people).groupBy(p => p.age).value()\n```\n\n<a name=\"array.insert\"></a>\n### Array.insert\n\nInserts an item at a specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').insert(1, '20').value() // [1, 20, 2, 3]\n```\n\n<a name=\"array.last\"></a>\n### Array.last\n\nReturns the item found at the last index or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst last = lift(['1', '2', '3').last() // '3'\n```\n\n<a name=\"array.map\"></a>\n### Array.map\n\nMaps this Array using a mapper function.  \n\n```ts\nimport {lift} from 'space-lift'\nconst mapped = lift(['1', '2', '3']).map(str => '0' + str).value() // ['01', '02', '03']\n```\n\n<a name=\"array.removeAt\"></a>\n### Array.removeAt\n\nRemoves the item found at the specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').removeAt(1).value() // ['1', '3']\n```\n\n<a name=\"array.reverse\"></a>\n### Array.reverse\n\nReverses the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').reverse().value() // ['3', '2', '1']\n```\n\n<a name=\"array.sort\"></a>\n### Array.sort\n\nSorts the Array in ascending order, using one or more iterators specifying which field to compare.  \nFor strings, localCompare is used.  \nThe sort is stable if the browser uses a stable sort (all modern engines do)  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst people = [\n  { name: 'Jesse', creationDate: 2 },\n  { name: 'Walt', creationDate: 1 },\n  { name: 'Mike', creationDate: 4 },\n  { name: 'Skyler', creationDate: 3 }\n]\n\nconst sorted = lift(people)\n  .sort(p => p.creationDate)\n  .map(p => p.name)\n  .value() // ['Walt', 'Jesse', 'Skyler', 'Mike']\n```\n\n<a name=\"array.take\"></a>\n### Array.take\n\nTakes the first 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').take(2).value() // ['1', '2']\n```\n\n<a name=\"array.takeRight\"></a>\n### Array.takeRight\n\nTakes the last 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3').takeRight(2).value() // ['2', '3']\n```\n\n<a name=\"array.toSet\"></a>\n### Array.toSet\n\nConverts this Array to a Set.  \n\n```ts\nimport {lift} from 'space-lift'\nconst set = lift(['1', '2', '2', '3').toSet().value() // Set(['1', '2', '3'])\n```\n\n<a name=\"array.update\"></a>\n### Array.update\n\nMake mutable modifications to a draft Array then return a new Array.  \nSee [update for Array](#update-for-array)  \n\nThe method is also accessible on Array wrappers for convenience:  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst array = [{a: 1}, {a: 2}]\n\nconst updated = lift(array).update(draft => {\n  draft[0].a = 10\n}).value()\n```\n\n<a name=\"array.updateAt\"></a>\n### Array.updateAt\n\nUpdates an item at the specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '2', '3').updateAt(1, '20').value() // ['1', '20', '2', '3']\n```\n\n<a name=\"array.pipe\"></a>\n### Array.pipe\n\nPipes this Array with an arbitrary transformation function.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 0, 3]).pipe(Boolean).value() // [true, false, true]\n```\n\n<a name=\"api.object\"></a>\n## Object\n\n* [add](#object.add)\n* [assoc](#object.assoc)\n* [contains](#object.contains)\n* [dissoc](#object.dissoc)\n* [filter](#object.filter)\n* [get](#object.get)\n* [is](#object.is)\n* [isEmpty](#object.isEmpty)\n* [keys](#object.keys)\n* [mapValues](#object.mapValues)\n* [remove](#object.remove)\n* [set](#object.set)\n* [toArray](#object.toArray)\n* [values](#object.values)\n\n<a name=\"object.mapValues\"></a>\n### Object.mapValues\n\nMaps this Object values using a mapper function.\n\n```ts\nimport {lift} from 'space-lift'\nconst mappedValues = lift({\n    chan1: [1, 2, 3],\n    chan2: [10, 11, 12]\n  })\n  .mapValues(numbers => numbers.map(n => n * 2))\n  .value() // { chan1: [2, 4, 6], chan2: [20, 22, 24] }\n```\n\nTODO: Complete detail and examples\n\n<a name=\"api.map\"></a>\n## Map\n\n* [first](#map.first)\n* [last](#map.last)\n\n<a name=\"map.first\"></a>\n### Map.first\n\nReturns the first element in this Map or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst map = new Map([\n  [1, { id: 1, name: 'Walter' }],\n  [2, { id: 2, name: 'Jesse' }]\n])\nconst first = lift(map).first() // { id: 1, name: 'Walter' }\n```\n\n<a name=\"map.last\"></a>\n### Map.last\n\nReturns the last element in this Map or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst map = new Map([\n  [1, { id: 1, name: 'Walter' }],\n  [2, { id: 2, name: 'Jesse' }]\n])\nconst first = lift(map).last() // { id: 2, name: 'Jesse' }\n```\n\nTODO: Complete detail and examples\n\n<a name=\"api.update\"></a>\n## update\n\n`update` is your go-to function to perform immutable updates on your `Objects`, `Array`, `Map` and `Set`, using a mutable API. If you know [immerjs](https://immerjs.github.io/immer/docs/introduction), it's very similar (great idea!) but with different design constraints in mind:  \n\n- Tiny implementation (The entirety of `space-lift` is way smaller than `immerjs`)\n- The `Array` draft has special methods to update it as the traditional mutable Array API in JavaScript is awful.\n- Instead of eagerly creating tons of costly `Proxies` (also called `drafts`), they are created only when strictly needed (look for: **will create a draft** in the documentation below).\n- `drafts` are only created for values of type `Object`, `Array`, `Map` or `Set`.\n- `update` should never have a returned value and will prevent it at the type level.\n- Remember that if you iterate through keys, values, etc drafts will **NOT** be created by default. Call one of the draft creating methods within the loop to perform the updates conditionally.\n- As long as you keep accessing drafts, the update can be done at any level of a tree.\n\n### update for Object\n\nAccessing a draft object property is the only `Object` operation that **will create a draft**\n\n#### Adding/updating an Object property\n\n```ts\nimport {update} from 'space-lift'\n\nconst obj: { a: 1; b?: number } = { a: 1 }\n\nconst updated = update(obj, draft => {\n  draft.b = 20\n})\n```\n\n#### Deleting an Object property\n\n```ts\nimport {update} from 'space-lift'\n\nconst obj: { a: 1; b?: number } = { a: 1, b: 20 }\n\nconst updated = update(obj, draft => {\n  delete draft.b\n})\n```\n\n### update for Map\n\nAll regular methods are available.  \n`get` is the only `Map` draft method that **will create a draft** for the returned value.  \n\n#### Map - Updating an existing value\n\n```ts\nimport {update} from 'space-lift'\n\nconst map = new Map([\n  [1, { id: 1, name: 'jon' }],\n  [2, { id: 2, name: 'Julia' }]\n])\n\nconst updated = update(map, draft => {\n  const value = draft.get(2)\n  if (value) return\n  \n  value.name = 'Bob'\n})\n```\n\n### update for Set\n\nAll regular `Set` methods are available.  \nNone of the `Set` draft methods **will create a draft** as a `Set` never hands value over.  \nStill, it's useful to update an immutable `Set` whether it's found nested in a tree or not and Sets are most of the time only useful for primitives values that wouldn't be drafted.  \n\n### update for Array\n\nMost Array methods are available but some are removed to make working with Arrays more pleasant:  \n\n- `splice`: Replaced by `insert`, `removeIf`.\n- `unshift`: Replaced by `preprend`.\n- `shift`: Replaced by `removeIf`.\n- `pop`: Replaced by `removeIf`.\n- `push`: Replaced by `append`.\n- `map` is not removed but `updateIf` is added as the conceptual, mutable equivalent.\n\nAs a result, the interface of a draft Array is not fully compatible with `Array`/`ReadonlyArray` and you must use `toDraft` if you want to assign a regular Array to a draft Array:  \n\n```ts\nimport {update, toDraft} from 'space-lift'\n\nconst updated = update({arr: [1, 2, 3]}, draft => {\n  draft.arr = toDraft([4, 5, 6])\n})\n```\n\n- Accessing an Array element by index **will create a draft** (be careful with this if you somehow end up manually iterating the Array)\n- `updateIf` **will create a draft** for each item satisfying its predicate.  \n\n#### Array - using updateIf\n\n```ts\nimport {update} from 'space-lift'\n\nconst arr = [\n  { id: 1, name: 'Jon' },\n  { id: 3, name: 'Julia' }\n]\n\nconst updated = update(arr, draft => {\n  draft.updateIf(\n    (item, index) => item.id === 3,\n    item => {\n      item.name = 'Bob'\n    }\n  )\n})\n```\n\n<a name=\"api.enum\"></a>\n## createEnum\n\nCreates a type safe string enumeration from a list of strings, providing:  \nthe list of all possible values, an object with all enum keys and the derived type of the enum in a single declaration.\n\n```ts\n  import { createEnum } from 'space-lift/es/enum'\n\n  const enumeration = createEnum('green', 'orange', 'red')\n\n  // We can use the derived type\n  type StopLightColor = typeof enumeration.T\n\n  // We can list all enum values as a Set.\n  enumeration.values // Set(['green', 'orange', 'red'])\n\n  // We can access each value of the enum directly\n  const color = enumeration.enum\n\n  const redish: StopLightColor = 'red'\n  const greenish: StopLightColor = color.green\n  const orange: 'orange' = color.orange\n  orange // 'orange'\n```\n\n<a name=\"api.union\"></a>\n## createUnion\n\nCreates a type-safe union, providing: derived types, factories and type-guards in a single declaration.\n\n```ts\n  import { createUnion } from 'space-lift'\n\n  // Let's take the example of a single input Form that can send a new message or edit an existing one.\n  // createUnion() gives you 3 tools:\n  // T: the derived type for the overall union\n  // is: a typeguard function for each state\n  // Lastly, the returned object has a key acting as a factory for each union member\n  const formState = createUnion({\n    creating: () => ({}),\n    editing: (msgId: string) => ({ msgId }),\n    sendingCreation: () => ({}),\n    sendingUpdate: (msgId: string) => ({ msgId }),\n  });\n\n  // The initial form state is 'creating'\n  let state: typeof formState.T = formState.creating() // { type: 'creating' }\n\n  // If the user wants to edit an existing message, we have to store the edited message id. Lets update our state.\n  onClickEdit(msgId: string) {\n    state = formState.editing(msgId) // { type: 'editing', msgId: 'someId' }\n  }\n\n  // In edition mode, we could want to get the message and change the send button label\n  if (formState.is('editing')(state)) {\n    getMessage(state.msgId) // thanks to the typeguard function, we know msgId is available in the state\n    buttonLabel = 'Update message'\n  }\n\n  // If needed, we can also access the derived type of a given state\n  type EditingType = typeof formState.editing.T\n  const editingObj: EditingType = formState.editing('someId')\n```\n\n\n\n<a name=\"api.result\"></a>\n## Result\n\nA `Result` is the result of a computation that may fail. An `Ok` represents a successful computation, while an `Err` represent the error case.\n\n\n<a name=\"Result\"></a>\n### Importing Result\n\nHere's everything that can be imported to use Results:\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nconst ok = Ok(10) // {ok: true, value: 10}\nconst err = Err('oops') // {ok: false, error: 'oops'}\n```\n\n\n<a name=\"autounwrap\"></a>\n# Auto unwrap\n\nMost of the time, you will have to call `.value()` to read your value back.  \nBecause it's distracting to write `.value()` more than once per chain, some operators will automatically unwrap values returned from their iterators (like Promise->then).\nThese operators are:\n\n- `Array.map`\n- `Array.flatMap`\n- `Array.updateAt`\n- `pipe`\n","readmeFilename":"README.md","gitHead":"7a073dc1436fd9b70444d0a852c90bb8c4d9a39b","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0-beta.14","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-AWRk9RdWtpSIHJ3Xhxuc+FK7qoQ3EGi2lwsb5XwnK2sEnWmQf9iJ61K1ZmGgSdVE6HJhB7TK3eR99ElKlJYCuw==","shasum":"e0617d473c6d0f4959d2d2b0c1b0d736656b1697","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0-beta.14.tgz","fileCount":50,"unpackedSize":116384,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0g9vCRA9TVsSAnZWagAAN7cP/3h5LEYyJR1CuhPj8gEl\nQgF3skMJ+qsX2oCj7FEhH4fN8YPIyECxK4E3ifKiodEh6jKVx8Fri1j7kaIh\nkSx2oQJ200R87P4zi2D3zSQYKHfcLl+IGS2Tm1AbFfonZRCqG555LZ4CLmmH\nNridkPKW5aY/5cNbwctIzkbkDsA4rs+/FpX5AxDqIoVDi+CAkdJdaVMVUflA\nYvOwvwvklTh9RfqLUPVIOe6P/Bb95swk1BbOJJbc6oxRG5e97kn9Dq6f0bKY\nU6KE0YT3V7xc6ZYW/VZPA/Lq9eiqNYD33xx8HqXtVZW9f41cVW9Vsdgme793\nzGSh6HYSqTXveZGww9pfMsIhAHut5SL4aKBesbaBAGPRapihKTbcpeS/Gh4E\nlyNt26QxPAn3VWM+mJWqIjpaVrFgSLa9XB921gZgglrX23FZbBLeQhSucCfE\ngwJu6QvOjVStuiS63BeUyAj3aMVql5AicBVMBsCsdPIz+jO7vZBMRx7oM6kJ\nR0a6jYi9kNAs7844P0oyuYy5cXWEO2jrOPtuAL/SHQG+II7pvSHxEuuAy9XI\nQalbGHYICI76CV9UT0t1i/MqNBv85AzfHhuFEf8Jur1f4YrF5tehX1M07oQY\nPPxjf5K2pQ/BFxfcxtmvryDWOULbfQEjgYG9cMugc2ukiDYaBw32vM9Vg733\n79al\r\n=K57A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF1dURHzcpq8futgZzaEBlQ40KxSQ+9YV5X3j0w8k8XPAiEAvkXHGzFR6vy7DyfYfU9wD7nX3DNANhXclEvoH2iwJnU="}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0-beta.14_1607602030717_0.5709631516178819"},"_hasShrinkwrap":false},"1.0.0":{"name":"space-lift","version":"1.0.0","description":"TypeScript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.0.3","jest":"26.6.1","ts-jest":"26.4.2","@types/jest":"26.0.15","@types/node":"14.14.2"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Map","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"f4b298bc16d2845bd4460b8022793755c40bdb39","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.0","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-vf4a9yeXE+f0hY5JzhOJG7qYl9qV2bC1ITCPIKtTfBt3pnpaCKwTEuyRfi1HQj6RQwCd/PLOCA+ygRVQJGQE4Q==","shasum":"2652a02898ccc90b8f3c7858e15ad784c1167ba4","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.0.tgz","fileCount":51,"unpackedSize":124203,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2nTICRA9TVsSAnZWagAAftkP/2Oh3r+MhnWDUL030bBT\nlRLD6kQ11VSF/V4tVcyH7zVvqvtCefmvv05LJLMDDtLg6zYll6hWrByT9d39\nKMSs7zE0jwiydwN1E32yA+1wMaeC/BD53piUVs/KyROvEteAVKyzn6Q4Ov/D\ng3VO3KVbIZ1i6wzrs377mmzUQxMs8fIIPP3vx279RA6/oMtYyjg1akCiTiF+\n93Ocy5J8yaIeqLSRYMJuOkuReLKq/a1d4ku8uCDRuqnN91yvxbvlOI9PFP3M\nbiE4BdIJmqNsVZ6nP2HzsORMFF62NCXlXCEZD9+mfnyULtDwRpfyr64AbDeo\nO+2oTLgzy9/Bai2Uft4GmdPq9EQMrKLvKq198BlbvmrWEKGIqrjKiUt1NdO+\nvB4OCsIsLgD+b962D46R3Digfodc7qrFxVrMesw3ics/QaiPGIOTCLbXGI+l\nvrC6xyuEQtRbaTutt0hutNtlKpo+ZesBbwdW2RTc9ztzXv8Z9Pc3Ez+Yh6/V\n1Cryt/tMq188bq1YR/AGjgJdgDZTVo4m183sVVHWpqDu8DUlWGsqt5RSLmQD\nAlw9ak5r77ixWadVcurMWU4f4rqggXGpKkr01wLsOkyNUFaOHNv/Txhfi51c\nMFUbue4cj2LaeMw+3LL9oDf/qsywv3hAZkFSllwaCRHpwQDLSrK767xIWNPK\n7rus\r\n=RHLg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICQH/hdIfmLPKY7A0Ar9pD06zD7prfghZePXYs92InZrAiAbumL7VbaxAdjLLps2zGwl5yDFD2Kq5pSsUgYgpRMjwQ=="}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.0_1608152263425_0.8507987496590945"},"_hasShrinkwrap":false},"1.0.1":{"name":"space-lift","version":"1.0.1","description":"TypeScript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'dom,es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'dom,es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.3.2","jest":"26.6.1","ts-jest":"26.4.2","leaflet":"1.7.1","@types/jest":"26.0.15","@types/node":"14.14.2","@types/leaflet":"1.7.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Map","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"e1c007f7bf477fe8ddc11b26524c796765787b8c","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.1","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZcnskklSaVTmsNPSuGPTkSShP7CvEt0gle6Ct3/FdbfXmwqWzlhqy7OJTqBWySo6xQlTBkyaky9cFmdRdQ69qw==","shasum":"b4fcdbd0fa6062e39473b5cf166f3fd18a766852","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.1.tgz","fileCount":51,"unpackedSize":130188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgxjWBCRA9TVsSAnZWagAA5/AQAIJsA1JaH5i3gyUCIi01\nE9blyx1yIqObuTRC6yHmeO3YOahgXbwahLydPCymsFMSExiq0jSHd7uTEL5l\nQP7xPgV0fdC5zTCAC6WoPjmyaSFa4azCiZFWreIZPoNDdQc8XWtN0N8aHVbu\nYUF9PC6z2Vz06BoU8v8hv4/6jBxqTFuIMFuYGSe7B/+rfBvuyfu9B74gR/1I\nSZskrodPhzV79bZYsQVB9KPKrdRZUie4evk6uNW0hd2WW+aeAC/p6vQ3on7l\nTC/0kIqb0GxoaqZzwSaPzj9eKioUEAcFokWtVDHef7j+1i2cWHjgwy0hw4xV\nWm7k0FsS5qwMGFll3cOeR0aYNO3iSTLc+g/Wkej31qgQYXiWn2tgDEckJhgU\ncp1g0RM4yfiGCZH9fb4GVt8u5U7HBqtILjO267pwNMF+ea1DLZlaZzSqVCUq\nitcgbCYjSbm403LNtPivp02+dqLOigs+hgCrV9oYwrSchquX8aNwJ/+0P0lC\nLZOg8qrgpkJ+UvNqEu/Mv1AlC+tego9WOgj6Y+xmY0X/VFLri7YwOi4eQs2+\nHWOnFe4psxN2gQRlEOq0GDkgVAmiq/uLcNTlSzgnDGhuNpcnzkPP8d5FsVK1\np89Vxvf5qbRcxdmxUScfPY9pmV1WNYeKWV6woYBjZcgRdM9qmtgzaGigDbM9\nOGKX\r\n=pQ0s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEVgdSrI929Sl7HwP+SX0tKtlzNI7ieSnxSbghTIHQ9AIhANuDH09XP6K85nTbJdIqiblZrNv7nhNJ8ErIm3UXMpSR"}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.1_1623602561745_0.2536870132807323"},"_hasShrinkwrap":false},"1.0.2":{"name":"space-lift","version":"1.0.2","description":"TypeScript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'dom,es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'dom,es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.3.2","jest":"26.6.1","ts-jest":"26.4.2","leaflet":"1.7.1","@types/jest":"26.0.15","@types/node":"14.14.2","@types/leaflet":"1.7.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Map","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"17de214e58b5b66db6987cfbc28f65a22231fa37","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.2","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-k/MlWMXkjzt34LVRSvl7bgsRxd8vjNTCtH+D5UbbiR11722Gb0JC0hfddeAJS5La3mX5k17ok8j6QZtYtteEDA==","shasum":"2cff774d045910a8ba258888307f5f11c56c6549","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.2.tgz","fileCount":51,"unpackedSize":131964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2ggBCRA9TVsSAnZWagAAwe4P/1KvSWA+mkZXkmphsdQO\ncOD0MesGgMjZl8nGuyCfj/cuGvJHBOYO65Ma2XIV48FN+T0aGBY5J3/CbfJS\nni8bXWCxopVp4x3Pa7noiXyZ/7boN9FXFYFZHRUz3BbLYmB8nWRGYqJN66xC\nEjfQ9XWKvpT81VpwchcohRTR9uCAt4CSLXOEdI6GYXt2VXmm0Z+NzGNm5AZu\n+Dckj6i3+wdCE/fNKRRTm6BZckt7+LRNoW6BAIJULyJVEDD94fh2ucKWNIA9\nh+JdtAnMpfmzPeQb58Ok+G6uOcOTbze95lBZEcKuSBuFOrtV6DLIzZzNxYKx\nvqfnvKOTjtEPS8ntO3UU5zuTlWJobNj0jIwKtYf+EiQqfZlfq6Uxv/GYRifS\nPr+GvHTxTvvA35JtPER2yZqJPXybE+LvJb11YCWbPcDWYzcMfQ90saJ5Xwbn\nwp2raXYsmoH3YG1jTm2ie6apF2g+a4A7UPdGZJuPXPe0GMnVxbGeXLbb0SP1\nXo7Gw/Y5DxZ0CBU/9oqLfa+AKShiKCcPn1w6otOau3pb8ojc8DDU/2Bl2qJg\nnlcZFTIAShRajELnwuyF9hyqBvVV1KANprsxCm7bclAHTNBotaC3DK1lbRyG\norj8Pt2cs5IG/Rky9TRbtCKNHxNRR36isS7rLzGi+KxjeohAZb8ZWE2Ldi9N\nqy9d\r\n=K295\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJlX7FhjZEy5bZou02IJkMf0pK0pNnn4WLH/BWqYnN8QIgBgC7U1dWAypUe0QOKYcqGNfGye/owz2xIykrDbbBwW4="}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.2_1624901633338_0.4124334135827299"},"_hasShrinkwrap":false},"1.0.3":{"name":"space-lift","version":"1.0.3","description":"TypeScript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'dom,es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'dom,es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.3.2","jest":"26.6.1","ts-jest":"26.4.2","leaflet":"1.7.1","@types/jest":"26.0.15","@types/node":"14.14.2","@types/leaflet":"1.7.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Map","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"bd124353e8f8eac5ff48e9d1dffcbaabb5a298c1","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.3","_nodeVersion":"14.14.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Z5EeC6ZmlxNNH0eJFkuUBZ2JhabybkQbMgwPy4ZyVscnJedFtHLFvEI1imqhT6gSOlEFuto/1rlk/f0UHAExKg==","shasum":"f1fcb56f3a3b62ced75be6e367db15c3d92f3b31","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.3.tgz","fileCount":51,"unpackedSize":131966,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2hkHCRA9TVsSAnZWagAA/Y4QAJ5S2X7/bwmkvIKDU6za\nkoF/mFUDArjoqmtjyje0aMy2CZ+YSGveKWIe63SwqRUPrRu+0r0ZPxP2lRRt\nN92ghuZjijzVPuOG6PeaD5PxreEOou8hyfReQXADcAvrztWJY6l9uAh2HGSk\n/mLr3HryPXdaE7WkIZdfPW9zTHPn2t64lIZf3iVlRs7nr0/O2sNu8EWaav67\nernZUrRuHVdYfpdQ5xbiEsCKw5fjPGVyYQDqenJ3ST/ufMM4i7mBSUxQAtu3\nlwZbU6I+B1BfL+IhL5YubzU0+x/sSWhZ5vwdazLIw+kceDthZahMW+WSsIca\nP1d7hXZ6pihN/i3xW5gJs5EFiJ2KdQVzA3xxrL4zfA/u7quX6x2T1WLYQw0u\npVS+qzeuPgwADj8doUAgXJXu2oV1hp3Jdd25ZIB7IUCYFXIbXNhdExexY7Z8\ns0DReDzmzRgUP+i1Q/uRq5Aog+tk92+aIzqoguZJuAbpDEsIFZa772/cgmvb\nqqcU+Gyy8nWpJFws8Glsdq47PvDHGCwnxOHvQqy47VmRa5+t5xQ+e8WimRLr\nxh0PuRAHsUm0vB3ZgPcsBPGC0Z5b/K3Vkc/4ZMaU3ofuXGqOHbEX19zy1m2m\nd41bV/blJ5NMUfHh0itDUMEXX/s7htb8ZSQeIyyU7kpsEcYMKAAKxOP/OXHl\nf9XY\r\n=IK90\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDHxVjLbmm71PY9HCT/4oba7NT8+hOnj5pTq6OaV6aciAiEA0Jw/6UtnrnDPjIwi7zmAIEuO0nSJYF6OIYSDQCd4MBo="}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.3_1624905990640_0.5216217970889172"},"_hasShrinkwrap":false},"1.0.4":{"name":"space-lift","version":"1.0.4","description":"TypeScript Array, Object, Map, Set, Union, Enum utils","sideEffects":true,"main":"commonjs/index.js","module":"es/index.js","typings":"commonjs/index.d.ts","scripts":{"build":"npm run build-commonjs && npm run build-es","build-es":"tsc src/*.ts --target 'es2015' --lib 'dom,es5,es2015.core,es2015.iterable' --outDir ./es --declaration --strict --suppressImplicitAnyIndexErrors --module es6 --moduleResolution node","build-commonjs":"tsc src/*.ts --target 'es2015' --lib 'dom,es5,es2015.core,es2015.iterable' --outDir ./commonjs --declaration --strict --suppressImplicitAnyIndexErrors --module commonjs --moduleResolution node","pretest":"npm run build","test-compilation-errors":"node test/testCompilationErrors","test":"jest && npm run test-compilation-errors","watch-test":"jest --watch","prepublish":"npm run build"},"devDependencies":{"typescript":"4.3.2","jest":"26.6.1","ts-jest":"26.4.2","leaflet":"1.7.1","@types/jest":"26.0.15","@types/node":"14.14.2","@types/leaflet":"1.7.0"},"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"licenses":[{"type":"MIT","url":"http://www.opensource.org/licenses/mit-license.php"}],"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Map","Set"],"jest":{"transform":{"^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["js","ts"],"testMatch":["<rootDir>/test/*.ts"],"testPathIgnorePatterns":["<rootDir>/test/shouldNotCompile.ts"],"globals":{"ts-jest":{"babelConfig":false}}},"prettier":{"tabWidth":2,"printWidth":110,"semi":false,"singleQuote":true,"arrowParens":"avoid","trailingComma":"none"},"gitHead":"fa66664bb90ee969d53f1cddf09ec4c0db85594f","bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"_id":"space-lift@1.0.4","_nodeVersion":"14.15.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-03EMF/ivNjZyRM8/Pag0bRLibKHcEHd2ioDFEkmgFk3oKYGq7bFeQU9QRgpG0VpLYSoc1UTb/HNvVXqJbme3Hg==","shasum":"ad722cda3389580995fb4daf1454f13e71609f25","tarball":"https://registry.npmjs.org/space-lift/-/space-lift-1.0.4.tgz","fileCount":51,"unpackedSize":133464,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAEsXqgKRsxN2wuinJA93tQmeZjm59Wu9w+p/I8WwKW9AiEAqxHqGuG4HjFvL9HgGT+pNEijytfbcqm8EVbTzkR8YuU="}]},"_npmUser":{"name":"boubiyeah","email":"boubiyeah@hotmail.com"},"directories":{},"maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/space-lift_1.0.4_1633614791861_0.12043874518728814"},"_hasShrinkwrap":false}},"readme":"**space-lift**\n\"Lift your values into space for infinite possibilities\"\n\n![](http://i.imgur.com/DWrI2JY.gif?noredirect)\n\nNote: Starting from version `1.0.0`, `space-lift` no longer contains the `Option` and `Result` monads. You can find these at [space-monad](https://github.com/AlexGalays/space-monad)\n\n\n# Rich Array, Object, Map, Set wrapper\n\nDesign goals\n- 100% immutable, no magic, no overwhelming polymorphism or dynamic operators\n- Fun to use\n- Correctness and first-class typescript typings\n- Tiny and performant (`space-lift` weights `7.2 kB` minified for roughly the same scope as `lodash` (`70.0 kB`) AND `immerjs` (`15.6 kB`)) and no amount of tree shaking can save you from heavy abstractions imported by all modules.  \n- Small set of functions, configurable with lambdas\n- Cover 95% of frontend data transformation needs without becoming a bloated lib just to cover the remaining 5%\n\n![spacelift lib size](https://user-images.githubusercontent.com/5928836/101669317-0923c300-3a52-11eb-89b7-1b607f7a243b.png)\n\n* [How to use](#howtouse)\n* [Examples](#examples)\n* [API](#api)\n  * [Array](#api.array)\n  * [Object](#api.object)\n  * [Map](#api.map)\n  * [Set](#api.set)\n  * [update](#api.update)\n    * [update for Object](#api.update.object)\n    * [update for Map](#api.update.map)\n    * [update for Set](#api.update.set)\n    * [update for Array](#api.update.array)\n  * [createEnum](#api.enum)\n  * [createUnion](#api.union)\n  * [Result](#api.result)\n  * [toDraft](#api.toDraft)]\n* [Auto unwrap](#autounwrap)\n\n\n<a name=\"howtouse\"></a>\n# How to use\n\nHere's everything that can be imported from `space-lift`:\n\n```ts\nimport {\n  lift,\n  update,\n  range,\n  is,\n  createUnion,\n  createEnum,\n  identity,\n  noop,\n  Result,\n  Ok,\n  Err,\n  Immutable\n} from 'space-lift'\n```\n\n- `lift` is the main attraction and is used to wrap an Array, Object, Map or Set to give it extra functionalities  \n- `update` can update an Object, Array, Map or Set without modifying the original  \n- `range` is a factory function for Arrays of numbers  \n- `is` is a helper used to determine if an instance is of a particular type (e.g `is.array([]) === true`)  \n- `createUnion` creates a bunch  of useful things when working with discriminated unions.  \n- `createEnum` creates a bunch of useful things when working with a string based enum.  \n- `identity` the identity function\n- `noop` a function that does nothing\n- `Result`, `Ok`, `Err` are used to work with computation that may fail  \n- `Immutable` a helper type that will recursively make a tree `Readonly`.\n\n\n<a name=\"examples\"></a>\n# Some Examples\n\n## Update an object inside an Array\n\n```ts\nimport { update } from 'space-lift'\n\nconst people = [\n  { id: 1, name: 'jon' },\n  { id: 2, name: 'sarah' },\n  { id: 3, name: 'nina' }\n]\n\nconst updatedPeople = update(people, draft => {\n  draft.updateIf(\n    p => p.id === 2,\n    personDraft => {personDraft.name = 'Nick'})\n})\n```\n\n## Sort on two fields\n\n```ts\nimport lift from 'space-lift'\n\nconst people = [\n  { first: 'jon',   last: 'haggis' },\n  { first: 'sarah', last: 'john' },\n  { first: 'nina',  last: 'pedro' }\n]\n\n// This will create an Array sorted by first name, then by last name\nconst sortedPeople = lift(people)\n  .sort(p => p.first, p => p.last)\n  .value()\n```\n\n<a name=\"api\"></a>\n# API\n\n<a name=\"api.array\"></a>\n## Array\n\n* [append](#array.append)\n* [appendAll](#array.appendAll)\n* [compact](#array.compact)\n* [count](#array.count)\n* [collect](#array.collect)\n* [distinct](#array.distinct)\n* [drop](#array.drop)\n* [dropRight](#array.dropRight)\n* [filter](#array.filter)\n* [first](#array.first)\n* [flatMap](#array.flatMap)\n* [flatten](#array.flatten)\n* [reduce](#array.reduce)\n* [get](#array.get)\n* [groupBy](#array.groupBy)\n* [insert](#array.insert)\n* [last](#array.last)\n* [map](#array.map)\n* [removeAt](#array.removeAt)\n* [reverse](#array.reverse)\n* [sort](#array.sort)\n* [take](#array.take)\n* [takeRight](#array.takeRight)\n* [toSet](#array.toSet)\n* [updateAt](#array.updateAt)\n* [pipe](#array.pipe)\n\n\n<a name=\"array.append\"></a>\n### Array.append\n\nAppends one item at the end of the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).append(4).value() // [1, 2, 3, 4]\n```\n\n<a name=\"array.appendAll\"></a>\n### Array.appendAll\n\nAppends an Iterable of items at the end of the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).appendAll([4, 5]).value() // [1, 2, 3, 4, 5]\n```\n\n<a name=\"array.compact\"></a>\n### Array.compact\n\nFilters all the falsy elements out of this Array.  \nAll occurences of false, null, undefined, 0, \"\" will be removed.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, null, 2, 3, undefined]).compact().value() // [1, 2, 3]\n```\n\n<a name=\"array.count\"></a>\n### Array.count\n\nCounts the items satisfying a predicate.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3]).count(n => n > 1) // 2\n```\n\n<a name=\"array.collect\"></a>\n### Array.collect\n\nMaps this Array's items, unless void or undefined is returned, in which case the item is filtered.  \nThis is effectively a `filter` + `map` combined in one.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3]).collect(n => {\n  if (n === 1) return;\n  return `${n*10}`\n}).value() // ['20', '30']\n```\n\n<a name=\"array.distinct\"></a>\n### Array.distinct\n\nCreates an array without any duplicate item.  \nIf a key function is passed, items will be compared based on the result of that function;  \nif not, they will be compared using strict equality.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst people = [{id: 1, name: 'Alexios'}, {id: 2, name: 'Bob'}, {id: 1, name: 'Alessia'}]\n\n// [{id: 1, name: 'Alexios'}, {id: 2, name: 'Bob'}]\nconst deduped = lift(people).distinct(p => p.id).value()\n```\n\n<a name=\"array.drop\"></a>\n### Array.drop\n\nDrops the first 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).drop(2).value() // [3]\n```\n\n<a name=\"array.dropRight\"></a>\n### Array.dropRight\n\nDrops the last 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 2, 3]).dropRight(2).value() // [1]\n```\n\n<a name=\"array.filter\"></a>\n### Array.filter\n\nFilters this array by aplying a predicate to all items and refine its type.  \n\n```ts\nimport {lift} from 'space-lift'\nconst filtered = lift([1, 2, 3]).filter(n => n > 1).value() // [2, 3]\n```\n\n<a name=\"array.first\"></a>\n### Array.first\n\nReturns the first element in this Array or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst first = lift([1, 2, 3]).first() // 1\n```\n\n<a name=\"array.flatMap\"></a>\n### Array.flatMap\n\nMaps this Array to an Array of Array | ArrayWrapper using a mapper function then flattens it.  \n\n```ts\nimport {lift} from 'space-lift'\nconst mapped = lift([1, 2, 3]).flatMap(n => [n + 1, n + 2]).value() // [2, 3, 3, 4, 4, 5]\n```\n\n<a name=\"array.flatten\"></a>\n### Array.flatten\n\nFlattens this Array of Arrays.  \n\n```ts\nimport {lift} from 'space-lift'\nconst flattened = lift([1, [2], [3, 4]]).flatten().value() // [1, 2, 3, 4]\n```\n\n<a name=\"array.reduce\"></a>\n### Array.reduce\n\nReduces this Array into a single value, using a starting value.  \n\n```ts\nimport {lift} from 'space-lift'\nconst count = lift([1, 2, 3]).reduce(0, (count, n) => count + n) // 6\n```\n\n<a name=\"array.get\"></a>\n### Array.get\n\nReturns the item found at the provided index or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst secondItem = lift([1, 2, 3]).get(1) // 2\n```\n\n<a name=\"array.groupBy\"></a>\n### Array.groupBy\n\nCreates a Map where keys are the results of running each element through a discriminator function.  \nThe corresponding value of each key is an array of the elements responsible for generating the key.  \n\n```ts\nimport {lift} from 'space-lift'\nconst people = [\n  { age: 10, name: 'jon' },\n  { age: 30, name: 'momo' },\n  { age: 10, name: 'kiki' },\n  { age: 28, name: 'jesus' },\n  { age: 29, name: 'frank' },\n  { age: 30, name: 'michel' }\n]\n\n// Map<number, Array<{age: number, name: string}>>\nconst peopleByAge = lift(people).groupBy(p => p.age).value()\n```\n\n<a name=\"array.insert\"></a>\n### Array.insert\n\nInserts an item at a specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3']).insert(1, '20').value() // [1, 20, 2, 3]\n```\n\n<a name=\"array.last\"></a>\n### Array.last\n\nReturns the item found at the last index or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\nconst last = lift(['1', '2', '3']).last() // '3'\n```\n\n<a name=\"array.map\"></a>\n### Array.map\n\nMaps this Array using a mapper function.  \n\n```ts\nimport {lift} from 'space-lift'\nconst mapped = lift(['1', '2', '3']).map(str => '0' + str).value() // ['01', '02', '03']\n```\n\n<a name=\"array.removeAt\"></a>\n### Array.removeAt\n\nRemoves the item found at the specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3']).removeAt(1).value() // ['1', '3']\n```\n\n<a name=\"array.reverse\"></a>\n### Array.reverse\n\nReverses the Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3']).reverse().value() // ['3', '2', '1']\n```\n\n<a name=\"array.sort\"></a>\n### Array.sort\n\nSorts the Array in ascending order, using one or more iterators specifying which field to compare.  \nFor strings, localCompare is used.  \nThe sort is stable if the browser uses a stable sort (all modern engines do)  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst people = [\n  { name: 'Jesse', creationDate: 2 },\n  { name: 'Walt', creationDate: 1 },\n  { name: 'Mike', creationDate: 4 },\n  { name: 'Skyler', creationDate: 3 }\n]\n\nconst sorted = lift(people)\n  .sort(p => p.creationDate)\n  .map(p => p.name)\n  .value() // ['Walt', 'Jesse', 'Skyler', 'Mike']\n```\n\n<a name=\"array.take\"></a>\n### Array.take\n\nTakes the first 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3']).take(2).value() // ['1', '2']\n```\n\n<a name=\"array.takeRight\"></a>\n### Array.takeRight\n\nTakes the last 'count' items from this Array.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '3']).takeRight(2).value() // ['2', '3']\n```\n\n<a name=\"array.toSet\"></a>\n### Array.toSet\n\nConverts this Array to a Set.  \n\n```ts\nimport {lift} from 'space-lift'\nconst set = lift(['1', '2', '2', '3']).toSet().value() // Set(['1', '2', '3'])\n```\n\n<a name=\"array.updateAt\"></a>\n### Array.updateAt\n\nUpdates an item at the specified index.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift(['1', '2', '2', '3']).updateAt(1, '20').value() // ['1', '20', '2', '3']\n```\n\n<a name=\"array.pipe\"></a>\n### Array.pipe\n\nPipes this Array with an arbitrary transformation function.  \n\n```ts\nimport {lift} from 'space-lift'\nconst updated = lift([1, 0, 3]).pipe(JSON.stringify) // '[1, 0, 3]'\n```\n\n<a name=\"api.object\"></a>\n## Object\n\n* [add](#object.add)\n* [isEmpty](#object.isEmpty)\n* [keys](#object.keys)\n* [mapValue](#object.mapValue)\n* [mapValues](#object.mapValues)\n* [pipe](#object.pipe)\n* [remove](#object.remove)\n* [values](#object.values)\n* [toArray](#object.toArray)\n* [toMap](#object.toMap)\n\n<a name=\"object.add\"></a>\n### Object.add\n\nAdds a new key/value to this object. This creates a new type.  \nTo add a nullable key to an object while preserving its type, use [update](#api.update) instead.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst updated = lift({a: 1, b: 2}).add(c, 3).value() // {a: 1, b: 2, c: 3}\n```\n\n<a name=\"object.isEmpty\"></a>\n### Object.isEmpty\n\nReturns whether this object contains no keys.\n\n```ts\nimport {lift} from 'space-lift'\n\nconst isEmpty = lift({a: 1, b: 2}).isEmpty() // false\n```\n\n<a name=\"object.keys\"></a>\n### Object.keys\n\nCreates an Array of all this object's keys, in no particular order.  \nIf the keys are a subtype of string, the Array will be typed with the proper key union type.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst isEmpty = lift({a: 1, b: 2}).keys().value() // ['a', 'b']\n```\n\n<a name=\"object.mapValue\"></a>\n### Object.mapValue\n\nMaps one of this Object values, by key.  \nThis is similar to remove('key').add('key', newValue) but is less error prone.  \nThis can change the type of the object.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst mappedValues = lift({\n  a: 1,\n  b: 2\n})\n.mapValue('b', num => `${num * 2}`)\n.value() // { a: 1, b: '4' }\n```\n\n<a name=\"object.mapValues\"></a>\n### Object.mapValues\n\nMaps this Object values using a mapper function.  \nThis is mostly useful for objects with a single value type.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst mappedValues = lift({\n  chan1: [1, 2, 3],\n  chan2: [10, 11, 12]\n})\n.mapValues(numbers => numbers.map(n => n * 2))\n.value() // { chan1: [2, 4, 6], chan2: [20, 22, 24] }\n```\n\n<a name=\"object.pipe\"></a>\n### Object.pipe\n\nPipes this Object with an arbitrary transformation function.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst updated = lift({a: 1}).pipe(JSON.stringify) // '{\"a\": 1}'\n```\n\n<a name=\"object.remove\"></a>\n### Object.remove\n\nRemoves a key/value from this object and return a new object (and type)  \nTo delete a (nullable) key from an object while preserving its type, use \"update()\" instead.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst updated = lift({a: 1, b: 2, c: 3}).remove('c').value() // {a: 1, b: 2}\n```\n\n<a name=\"object.values\"></a>\n### Object.values\n\nCreates an Array with all these object's values.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst updated = lift({a: 1, b: 2, c: 3}).values().value() // [1, 2, 3]\n```\n\n<a name=\"object.toArray\"></a>\n### Object.toArray\n\nConverts this Object to an Array of tuples.  \nSimilar to Object.entries() but retains the type of keys.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst updated = lift({a: 1, b: 2, c: 3}).toArray().value() // [['a', 1], ['b', 2], ['c', 3]]\n```\n\n<a name=\"object.toMap\"></a>\n### Object.toMap\n\nTransforms this Object to a Map where the keys are the string typed keys of this Object.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst updated = lift({a: 1, b: 2, c: 3}).toMap().value() // Map([['a', 1], ['b', 2], ['c', 3]])\n```\n\n\n\n<a name=\"api.map\"></a>\n## Map\n\n* [set](#map.set)\n* [delete](#map.delete)\n* [collect](#map.collect)\n* [filter](#map.filter)\n* [first](#map.first)\n* [last](#map.last)\n* [mapValues](#map.mapValues)\n* [pipe](#map.pipe)\n* [setDefaultValue](#map.setDefaultValue)\n* [updateValue](#map.updateValue)\n* [toArray](#map.toArray)\n* [toObject](#map.toObject)\n\n<a name=\"map.set\"></a>\n### Map.set\n\nSets a new key/value.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst map = new Map([\n  ['a', 1],\n  ['b', 2]\n])\n\nconst updated = lift(map).set('c', 3).value() // Map([['a', 1], ['b', 2], ['c', 3]])\n```\n\n<a name=\"map.delete\"></a>\n### Map.delete\n\nDeletes a key/value.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst map = new Map([\n  ['a', 1],\n  ['b', 2]\n])\n\nconst updated = lift(map).delete('b').value() // Map([['a', 1]])\n```\n\n<a name=\"map.collect\"></a>\n### Map.collect\n\nMaps this Map's keys and values, unless void or undefined is returned, in which case the entry is filtered.  \nThis is effectively a `filter` + `map` combined in one.  \n\n```ts\nimport {lift, update} from 'space-lift'\n\nconst map = new Map([\n  [1, { id: 1, name: 'aa' }],\n  [2, { id: 2, name: 'bb' }]\n])\n\nconst updated = lift(map).collect((key, value) => {\n  if (key === 2) return\n  return [\n    key * 10,\n    update(value, v => { v.name = `${v.name}$` })\n  ]\n}).value() // Map([[10, {id: 2, name: 'bb$'}]])\n```\n\n<a name=\"map.filter\"></a>\n### Map.filter\n\nFilters this Map's keys and values by aplying a predicate to all values and refine its type.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst map = new Map([\n  ['a', 1],\n  ['b', 2]\n])\n\nconst updated = lift(map).filter((key, value) => key === 1).value() // Map([['a', 1]])\n```\n\n<a name=\"map.first\"></a>\n### Map.first\n\nReturns the first element in this Map or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst map = new Map([\n  [1, { id: 1, name: 'Walter' }],\n  [2, { id: 2, name: 'Jesse' }]\n])\n\nconst first = lift(map).first() // { id: 1, name: 'Walter' }\n```\n\n<a name=\"map.last\"></a>\n### Map.last\n\nReturns the last element in this Map or undefined.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst map = new Map([\n  [1, { id: 1, name: 'Walter' }],\n  [2, { id: 2, name: 'Jesse' }]\n])\n\nconst first = lift(map).last() // { id: 2, name: 'Jesse' }\n```\n\n<a name=\"map.mapValues\"></a>\n### Map.mapValues\n\nMaps this map's values.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst map = new Map([\n  ['a', 1],\n  ['b', 2]\n])\n\nconst updated = lift(map).filter(value => value * 2).value() // Map([['a', 2], ['b', 4]])\n```\n\n<a name=\"map.pipe\"></a>\n### Map.pipe\n\nPipes this Map with an arbitrary transformation function.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst map = new Map([\n  ['a', 1],\n  ['b', 2]\n])\n\nconst yay = lift(map).pipe(m => m.toString()) // '[object Map]' \n```\n\n<a name=\"map.setDefaultValue\"></a>\n### Map.setDefaultValue\n\nIf this key is missing, set a default value.\n\n```ts\nimport {lift} from 'space-lift'\n\nconst map = new Map([\n  ['a', 1],\n  ['b', 2]\n])\n\nconst map = lift(map)\n  .setDefaultValue('c', 3)\n  .setDefaultValue('b', 10)\n  .value() // Map([['a', 1], ['b', 2], ['c', 3]])\n```\n\n<a name=\"map.updateValue\"></a>\n### Map.updateValue\n\nSame as [update(map, draft => draft.updateValue](#api.update.map.updateValue), exposed here for convenience and readability as it's often used immediately after `setDefaultValue`.\n\n```ts\nimport {lift} from 'space-lift'\n\nconst map = new Map([\n  ['a', {name: 'a'}],\n  ['b', {name: 'b'}]\n])\n\nconst map = lift(map).updateValue('b', draft => { draft.name = 'c' }).value()\n```\n\n<a name=\"map.toArray\"></a>\n### Map.toArray\n\nTransforms this Map into an Array of [key, value] tuples.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst map = new Map([\n  ['a', 1],\n  ['b', 2]\n])\n\nconst array = lift(map).toArray().value() // [ ['a', 1], ['b', 2] ]\n```\n\n<a name=\"map.toObject\"></a>\n### Map.toObject\n\nTransforms this Map into an Object.  \nOnly available if this Map's keys are a subtype of string or number.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst map = new Map([\n  ['a', 1],\n  ['b', 2]\n])\n\nconst array = lift(map).toObject().value() // { 'a': 1, 'b': 2 }\n```\n\n<a name=\"api.set\"></a>\n## Set\n\n* [add](#set.add)\n* [addAll](#set.addAll)\n* [delete](#set.delete)\n* [collect](#set.collect)\n* [filter](#set.filter)\n* [intersection](#set.intersection)\n* [difference](#set.difference)\n* [pipe](#set.pipe)\n* [toArray](#set.toArray)\n\n<a name=\"set.add\"></a>\n### Set.add\n\nAdds a new value to this Set.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst set = new Set([1, 2, 3])\n\nconst updated = lift(set).add(4).add(3).value() // Set([1, 2, 3, 4])\n```\n\n<a name=\"set.addAll\"></a>\n### Set.addAll\n\nAdds all items from the passed iterable to this Set.   \n\n```ts\nimport {lift} from 'space-lift'\n\nconst set = new Set([1, 2, 3])\n\nconst updated = lift(set).addAll([4, 5, 3]).value() // Set([1, 2, 3, 4, 5])\n```\n\n<a name=\"set.delete\"></a>\n### Set.delete\n\nDeletes one value from this Set.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst set = new Set([1, 2, 3])\n\nconst updated = lift(set).delete(2).value() // Set([1, 3])\n```\n\n<a name=\"set.collect\"></a>\n### Set.collect\n\nMaps this Set's items, unless void or undefined is returned, in which case the item is filtered.  \nThis is effectively a `filter` + `map` combined in one.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst set = new Set([1, 2, 3])\n\nconst updated = lift(set).collect(num => {\n  if (num === 2) return\n  return num * 2\n}).value() // Set([2, 6])\n```\n\n<a name=\"set.filter\"></a>\n### Set.filter\n\nFilters this Set's items by aplying a predicate to all values and refine its type.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst set = new Set([1, 2, 3])\n\nconst updated = lift(set).filter(num => num !== 2).value() // Set([1, 3])\n```\n\n<a name=\"set.intersection\"></a>\n### Set.intersection\n\nReturns the Set of all items of this Set that are also found in the passed Set.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst set = new Set([1, 2, 3])\nconst otherSet = new Set([2, 3, 4])\n\nconst intersection = lift(set).intersection(otherSet).value() // Set([2, 3])\n```\n\n<a name=\"set.difference\"></a>\n### Set.difference\n\nReturns the Set of all items of this Set that are not found in the passed Set.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst set = new Set([1, 2, 3])\nconst otherSet = new Set([2, 3, 4])\n\nconst diff = lift(set).difference(otherSet).value() // Set([1])\n```\n\n<a name=\"set.pipe\"></a>\n### Set.pipe\n\nPipes this Set with an arbitrary transformation function.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst set = new Set([1, 2, 3])\n\nconst yay = lift(set).pipe(s => s.toString()) // '[object Set]' \n```\n\n<a name=\"set.toArray\"></a>\n### Set.toArray\n\nTransforms this Set into an Array. The insertion order is kept.  \n\n```ts\nimport {lift} from 'space-lift'\n\nconst set = new Set([1, 2, 3])\n\nconst array = lift(set).toArray().value() // [1, 2, 3]\n```\n\n\n\n<a name=\"api.update\"></a>\n## update\n\n`update` is your go-to function to perform immutable updates on your `Objects`, `Array`, `Map` and `Set`, using a mutable API. If you know [immerjs](https://immerjs.github.io/immer/docs/introduction), it's very similar (great idea!) but with different design constraints in mind:  \n\n- Tiny implementation (The entirety of `space-lift` is way smaller than `immerjs`)\n- The `Array` draft has special methods to update it as the traditional mutable Array API in JavaScript is awful.\n- Instead of eagerly creating tons of costly `Proxies` (also called `drafts`), they are created only when strictly needed (look for: **will create a draft** in the documentation below).\n- `drafts` are only created for values of type `Object`, `Array`, `Map` or `Set`.\n- `update` should never have a returned value and will prevent it at the type level.\n- Remember that if you iterate through keys, values, etc drafts will **NOT** be created by default. Call one of the draft creating methods within the loop to perform the updates conditionally.\n- As long as you keep accessing drafts, the update can be done at any level of a tree.\n\n<a name=\"api.update.object\"></a>\n### update for Object\n\nAccessing a draft object property is the only `Object` operation that **will create a draft**\n\n#### Adding/updating an Object property\n\n```ts\nimport {update} from 'space-lift'\n\nconst obj: { a: 1; b?: number } = { a: 1 }\n\nconst updated = update(obj, draft => {\n  draft.b = 20\n})\n```\n\n#### Deleting an Object property\n\n```ts\nimport {update} from 'space-lift'\n\nconst obj: { a: 1; b?: number } = { a: 1, b: 20 }\n\nconst updated = update(obj, draft => {\n  delete draft.b\n})\n```\n\n<a name=\"api.update.map\"></a>\n### update for Map\n\nAll regular methods are available.  \n\n- `get` will **will create a draft** for the returned value.  \n- `setDefaultValue` **will create a draft**\n\n#### Map - Updating an existing value\n\n```ts\nimport {update} from 'space-lift'\n\nconst map = new Map([\n  [1, { id: 1, name: 'jon' }],\n  [2, { id: 2, name: 'Julia' }]\n])\n\nconst updated = update(map, draft => {\n  const value = draft.get(2)\n  if (value) return\n  \n  value.name = 'Bob'\n})\n```\n\n<a name=\"api.update.map.updateValue\"></a>\n#### Map - Using updateValue\n\nIf the key is found, run the drafted value through an update function.\nFor primitives, the update function must return a new value whereas for objects, the drafted value can be modified directly.\n\n```ts\nimport {update} from 'space-lift'\n\nconst map = new Map([\n  [1, { id: 1, name: 'jon' }],\n  [2, { id: 2, name: 'Julia' }]\n])\n\nconst updated = update(map, draft =>\n  draft.updateValue(2, value => { value.name = 'Julia' }))\n```\n\n\n<a name=\"api.update.set\"></a>\n### update for Set\n\nAll regular `Set` methods are available.  \nNone of the `Set` draft methods **will create a draft** as a `Set` never hands value over.  \nStill, it's useful to update an immutable `Set` whether it's found nested in a tree or not and Sets are most of the time only useful for primitives values that wouldn't be drafted.  \n\n<a name=\"api.update.array\"></a>\n### update for Array\n\nMost Array methods are available but some are removed to make working with Arrays more pleasant:  \n\n- `splice`: Replaced by `insert`, `removeIf`.\n- `unshift`: Replaced by `preprend`.\n- `shift`: Replaced by `removeIf`.\n- `pop`: Replaced by `removeIf`.\n- `push`: Replaced by `append`.\n- `map` is not removed but `updateIf` is added as the conceptual, mutable equivalent.\n\nAs a result, the interface of a draft Array is not fully compatible with `Array`/`ReadonlyArray` and you must use [toDraft](#api.toDraft) if you want to assign a regular Array to a draft Array.  \n\n- Accessing an Array element by index **will create a draft** (be careful with this if you somehow end up manually iterating the Array)\n- `updateIf` **will create a draft** for each item satisfying its predicate.  \n\n#### Array - using updateIf\n\n```ts\nimport {update} from 'space-lift'\n\nconst arr = [\n  { id: 1, name: 'Jon' },\n  { id: 3, name: 'Julia' }\n]\n\nconst updated = update(arr, draft => {\n  draft.updateIf(\n    (item, index) => item.id === 3,\n    item => {\n      item.name = 'Bob'\n    }\n  )\n})\n```\n\n<a name=\"api.enum\"></a>\n## createEnum\n\nCreates a type safe string enumeration from a list of strings, providing:  \nthe list of all possible values, an object with all enum keys and the derived type of the enum in a single declaration.\n\n```ts\n  import { createEnum } from 'space-lift/es/enum'\n\n  const color = createEnum('green', 'orange', 'red')\n\n  // We can use the derived type\n  export type Color = typeof color.T\n\n  // We can list all enum values as a Set.\n  color.values // Set(['green', 'orange', 'red'])\n\n  // We can access each value of the enum directly if that's useful\n  export const Color = color.enum\n\n  const redish: Color = 'red'\n  const greenish: Color = Color.green\n  const orange: 'orange' = Color.orange\n  orange // 'orange'\n```\n\n<a name=\"api.union\"></a>\n## createUnion\n\nCreates a type-safe union, providing: derived types, factories and type-guards in a single declaration.\n\n```ts\n  import { createUnion } from 'space-lift'\n\n  // Let's take the example of a single input Form that can send a new message or edit an existing one.\n  // createUnion() gives you 3 tools:\n  // T: the derived type for the overall union\n  // is: a typeguard function for each state\n  // Lastly, the returned object has a key acting as a factory for each union member\n  const formState = createUnion({\n    creating: () => ({}),\n    editing: (msgId: string) => ({ msgId }),\n    sendingCreation: () => ({}),\n    sendingUpdate: (msgId: string) => ({ msgId }),\n  });\n\n  // The initial form state is 'creating'\n  let state: typeof formState.T = formState.creating() // { type: 'creating' }\n\n  // If the user wants to edit an existing message, we have to store the edited message id. Lets update our state.\n  onClickEdit(msgId: string) {\n    state = formState.editing(msgId) // { type: 'editing', msgId: 'someId' }\n  }\n\n  // In edition mode, we could want to get the message and change the send button label\n  if (formState.is('editing')(state)) {\n    getMessage(state.msgId) // thanks to the typeguard function, we know msgId is available in the state\n    buttonLabel = 'Update message'\n  }\n\n  // If needed, we can also access the derived type of a given state\n  type EditingType = typeof formState.editing.T\n  const editingObj: EditingType = formState.editing('someId')\n```\n\n\n\n<a name=\"api.result\"></a>\n## Result\n\nA `Result` is the result of a computation that may fail. An `Ok` represents a successful computation, while an `Err` represent the error case.\n\n\n<a name=\"Result\"></a>\n### Importing Result\n\nHere's everything that can be imported to use Results:\n\n```ts\nimport { Result, Ok, Err } from 'space-lift'\n\nconst ok = Ok(10) // {ok: true, value: 10}\nconst err = Err('oops') // {ok: false, error: 'oops'}\n```\n\n<a name=\"api.toDraft\"></a>\n### toDraft\n\nTS currently has a limitation where this library must type its getter the same as its setters. Thus, if you want to `assign` an entirely new value that contains a type not compatible\nwith its drafted type (so anything but primitives and objects) you will need to use `toDraft`:  \n\n```ts\nimport {update, toDraft} from 'space-lift'\n\nconst updated = update({arr: [1, 2, 3]}, draft => {\n  draft.arr = toDraft([4, 5, 6])\n})\n```\nThis limitation might be fixed one day: [TS ticket](https://github.com/microsoft/TypeScript/issues/43826)\n\n<a name=\"autounwrap\"></a>\n# Auto unwrap\n\nMost of the time, you will have to call `.value()` to read your value back.  \nBecause it's distracting to write `.value()` more than once per chain, some operators will automatically unwrap values returned from their iterators (like Promise->then).\nThese operators are:\n\n- `Array.map`\n- `Array.flatMap`\n- `Array.updateAt`\n- `pipe`\n","maintainers":[{"name":"boubiyeah","email":"boubiyeah@hotmail.com"}],"time":{"modified":"2022-06-26T22:31:12.930Z","created":"2017-02-09T13:51:57.011Z","0.0.1":"2017-02-09T13:51:57.011Z","0.0.2":"2017-02-09T20:58:09.516Z","0.0.3":"2017-02-15T22:58:49.449Z","0.0.4":"2017-02-17T17:55:39.084Z","0.0.5":"2017-02-19T14:20:16.601Z","0.1.0":"2017-04-02T18:02:16.126Z","0.1.1":"2017-04-18T07:45:38.764Z","0.2.0":"2017-05-15T15:03:05.850Z","0.3.0":"2017-05-23T06:49:58.708Z","0.3.1":"2017-07-03T11:42:33.292Z","0.4.0":"2017-07-30T14:58:02.025Z","0.4.1":"2017-07-30T16:03:03.883Z","0.4.2":"2017-08-08T11:47:42.116Z","0.4.3":"2017-08-08T12:22:16.324Z","0.4.4":"2017-08-22T15:44:56.501Z","0.5.0":"2017-08-24T18:58:16.614Z","0.5.1":"2017-09-17T10:27:47.203Z","0.6.0":"2017-10-20T20:51:42.206Z","0.6.1":"2017-10-23T16:28:41.574Z","0.6.2":"2017-10-26T13:14:09.953Z","0.6.3":"2017-11-07T10:03:57.896Z","0.6.4":"2017-11-17T14:25:01.226Z","0.6.5":"2018-02-26T17:19:58.695Z","0.7.0":"2018-03-16T10:06:53.353Z","0.7.1":"2018-04-05T10:19:32.498Z","0.7.2":"2018-05-24T09:37:20.830Z","0.8.0":"2018-07-25T16:13:45.647Z","0.8.1":"2018-10-08T18:52:26.266Z","0.8.2":"2018-10-14T10:01:07.196Z","0.8.3":"2018-10-14T19:36:50.556Z","0.8.4":"2018-10-24T17:42:21.895Z","0.8.5":"2018-11-04T21:00:55.147Z","0.8.6":"2018-11-27T00:43:56.222Z","0.8.7":"2018-12-06T13:46:17.055Z","1.0.0-beta.0":"2020-11-01T13:35:35.468Z","1.0.0-beta.1":"2020-11-01T13:53:02.389Z","1.0.0-beta.2":"2020-11-01T21:07:29.317Z","1.0.0-beta.3":"2020-11-01T23:48:11.238Z","1.0.0-beta.4":"2020-11-04T20:45:55.454Z","1.0.0-beta.5":"2020-11-04T21:15:53.482Z","1.0.0-beta.6":"2020-11-05T00:30:37.527Z","1.0.0-beta.7":"2020-11-08T12:50:55.734Z","1.0.0-beta.8":"2020-11-08T18:51:53.864Z","1.0.0-beta.9":"2020-11-17T09:58:14.611Z","1.0.0-beta.10":"2020-11-23T11:20:41.644Z","1.0.0-beta.11":"2020-11-26T15:19:30.784Z","1.0.0-beta.12":"2020-12-02T20:00:53.515Z","1.0.0-beta.13":"2020-12-09T17:02:04.539Z","1.0.0-beta.14":"2020-12-10T12:07:10.856Z","1.0.0":"2020-12-16T20:57:43.619Z","1.0.1":"2021-06-13T16:42:41.875Z","1.0.2":"2021-06-28T17:33:53.466Z","1.0.3":"2021-06-28T18:46:30.764Z","1.0.4":"2021-10-07T13:53:12.037Z"},"homepage":"https://github.com/AlexGalays/spacelift","keywords":["TypeScript","ts","TS","std lib","collection","underscore","array","object","Map","Set"],"repository":{"type":"git","url":"git+https://github.com/AlexGalays/spacelift.git"},"author":{"name":"Alexandre Galays","url":"https://github.com/AlexGalays/"},"bugs":{"url":"https://github.com/AlexGalays/spacelift/issues"},"readmeFilename":"README.md"}