{"_id":"@bemedev/x-matches","_rev":"2-a2f16efc45b3068fae0daa16891f7a87","name":"@bemedev/x-matches","dist-tags":{"latest":"0.0.3"},"versions":{"0.0.1":{"name":"@bemedev/x-matches","author":{"name":"chlbri","email":"bri_lvi@icloud.com"},"version":"0.0.1","license":"MIT","main":"lib/index.js","typings":"lib/index.d.ts","module":"lib/index.mjs","engines":{"node":">=12"},"keywords":["state","xstate","Statevalue","beme.dev","condition","logical","matcher"],"scripts":{"config":"pnpm install","rollup":"rollup -c","prepare":"husky install","build":"rm -rf lib && pnpm run rollup","test":"vitest run --passWithNoTests","test:watch":"vitest --passWithNoTests","remove":"rm -rf lib node_modules pnpm-lock.yaml","clean":"pnpm run remove && pnpm run config","prettier":"prettier --write \"src/**/*.{ts,tsx}\"","eslint":"eslint \"{src/**/*,App}.{ts,tsx}\"","lint":"pnpm run prettier && pnpm run eslint --fix","lint-watch":"onchange --await-write-finish 5500 \"**/*\" -- pnpm run lint","postpublish":"git fetch & git pull","prepublishOnly":"pnpm run build && pnpm run lint"},"devDependencies":{"@typescript-eslint/eslint-plugin":"^5.43.0","@typescript-eslint/parser":"^5.43.0","esbuild":"^0.15.14","eslint":"^8.27.0","husky":"^8.0.2","onchange":"^7.1.0","prettier":"^2.7.1","pretty-quick":"^3.1.3","rollup":"^3.3.0","rollup-plugin-dts":"^5.0.0","rollup-plugin-esbuild":"^5.0.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.9.3","vite":"^3.2.4","vite-tsconfig-paths":"^3.5.2","vitest":"^0.25.2"},"dependencies":{"@bemedev/decompose":"^0.1.6"},"gitHead":"f8cc52801aa2a92ddff800333cbd5a57a64f870c","description":"XState is a implementation of **[Statecharts](https://pdf.sciencedirectassets.com/271600/1-s2.0-S0167642300X00603/1-s2.0-0167642387900359/main.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEBUaCXVzLWVhc3QtMSJHMEUCIEB%2FNdTHRam3xNVGmmPL0%2FayP3NvYHO1D8sj4SWPQ3O","_id":"@bemedev/x-matches@0.0.1","_nodeVersion":"16.18.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-ILnNGMu6EUGqzBuTfqLgRzpDO7f0SSWSdOSjqriZ8G+vFy5kUanofCJqeC3c/HlkZRJmx2o8t+x8AWY7NoSLSQ==","shasum":"dd7ddf9c2bd6c3fbfc1b40ee0d0f52ed889aaa57","tarball":"https://registry.npmjs.org/@bemedev/x-matches/-/x-matches-0.0.1.tgz","fileCount":8,"unpackedSize":13398,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDmFdEgR3EV3XNZY0AcSsDTV/uukEmqMjKQzfl1FMMTVAiEApLA4Qe+XbIPsvFWTXKs5RktegHMVU0OSh1JpRp+45aw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjeQKCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqQMw//Tv7z7ytZioSo80S+pwBl4oj4IdVdqABti14d5IM7RlJ34LoN\r\nTwDRwiPLAhu9bOly+gJliFcCXj00HcsPT/x0heUYbTIvAL9yhCZfeBnJT9gL\r\nRwhq84s9X4zIdakXz1CyUE8SWjeBhRt8G957GDFHctfgJKR0bVlv+OdkmLoc\r\nfeEoLp/NRbZVw/b7n6LrqlhoGW0xMXZ6giNjUUUjq/+IV08xT3iKxooRjggJ\r\nL9xwfRSzYCQSHFcOG5FC5tXJ6KVYoCJlxdpaasVDwHorUxB3RbqE1k1BzQOG\r\nro+cDLlGKzCCBO3T8D97KPBeyv+7y25Qlmi++EI3qennsRXSFVtZaEkXDM7M\r\neJHCg9OvLlG0btVFriDoguCBtaO6eZRCKaLMvotqtANUN3yX3fPof2dGbXY/\r\nmjSJKVz0E8pA2AqgQhvsJVSyfAOu7uceaWn1zzir4RjxFMPgaS/JrBd9CQV4\r\nR8EZEiutXlyj8B1qZ/+M04SP3hB3VrGrum8+lKFgP9cLWaVjhHsXes6CspD7\r\noFmssKmsKL1OWFlUnLUpzI2R8lI/1AaSiOtOBY84B5DncPya/G3xIL8cpqtQ\r\nOKy/KXfs3pQ7QVX+ResjXa6/Iw3shDT1ie1j20tu86RRTMuPLg/SRvw8BZ2t\r\n1NPzwBzIr6TNWUwsh6v7qv4Jn3BD3uAr1Fo=\r\n=J26a\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bemedev","email":"bri_lvi@icloud.com"},"directories":{},"maintainers":[{"name":"bemedev","email":"bri_lvi@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/x-matches_0.0.1_1668874882783_0.48670574189164073"},"_hasShrinkwrap":false},"0.0.2":{"name":"@bemedev/x-matches","description":"Better way to macth states in XState","author":{"name":"chlbri","email":"bri_lvi@icloud.com"},"version":"0.0.2","license":"MIT","main":"lib/index.js","typings":"lib/index.d.ts","module":"lib/index.mjs","engines":{"node":">=12"},"keywords":["state","xstate","Statevalue","beme.dev","condition","logical","matcher"],"scripts":{"config":"pnpm install","rollup":"rollup -c","prepare":"husky install","build":"rm -rf lib && pnpm run rollup","test":"vitest run --passWithNoTests","test:watch":"vitest --passWithNoTests","remove":"rm -rf lib node_modules pnpm-lock.yaml","clean":"pnpm run remove && pnpm run config","prettier":"prettier --write \"src/**/*.{ts,tsx}\"","eslint":"eslint \"{src/**/*,App}.{ts,tsx}\"","lint":"pnpm run prettier && pnpm run eslint --fix","lint-watch":"onchange --await-write-finish 5500 \"**/*\" -- pnpm run lint","postpublish":"git fetch & git pull","prepublishOnly":"pnpm run build && pnpm run lint"},"devDependencies":{"@typescript-eslint/eslint-plugin":"^5.43.0","@typescript-eslint/parser":"^5.43.0","esbuild":"^0.15.14","eslint":"^8.27.0","husky":"^8.0.2","onchange":"^7.1.0","prettier":"^2.7.1","pretty-quick":"^3.1.3","rollup":"^3.3.0","rollup-plugin-dts":"^5.0.0","rollup-plugin-esbuild":"^5.0.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.9.3","vite":"^3.2.4","vite-tsconfig-paths":"^3.5.2","vitest":"^0.25.2"},"dependencies":{"@bemedev/decompose":"^0.1.6"},"gitHead":"1318b3a4bd65b54322a6482d6a72dd4ee145e7d8","_id":"@bemedev/x-matches@0.0.2","_nodeVersion":"16.18.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-eQXP+TT7ta4sWarc1nnh0jLr4mwbOKKB7yol4o/zv7Fjrpl26Du/kMe7j1iSMV6MOYcm2HxtZEDpKPeom8oixA==","shasum":"ac28bf6931ce4266f551b67e994c25bfb83b171b","tarball":"https://registry.npmjs.org/@bemedev/x-matches/-/x-matches-0.0.2.tgz","fileCount":8,"unpackedSize":13495,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVkmAe69VrV5/kjCOss4+EtmA+ZLtuuD9tK7GU79NXiQIgJdnX9kJk6dsAJuxDhJVQ5KRBG0dW2rG4GLw/wxO1uzE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjeQM7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpk+xAAmSjHST3cQdj/COkwjU2PdMeVHj93XDX/bPmgrzH0/eA18g7c\r\nO8pBEDQ8rXSP3PYkzu1Mx8BnOSwtaL/klwqDR38n/qhuLXMa9ikQj0XdXp5D\r\nAwk0mE9GLa3tR+yLYKuZp3Ie7bw4Of7Mfs6KHZOttkabSfR3hdJK/AJp3OnH\r\nEmJbpQMFyajq9h0gdu0ykf149UPbc8rAntnetNT6CctGFPhmfKTxBuhm0Jfj\r\n7Wr+QFWx+7kUTiBblPpxCQejraCOn40bMhFjJ086L7VKUoMNTYofaRCk8O1y\r\nBBZ5JRDuekqXhltW+FkQD+a6DqYBAQMO+Ulf+g4j6w5R4+Vm3amkzOhr1/xE\r\nS48U51cahn+bi975MBqEsfhqRz+yo9b2yraQAdrBkIXqsMky+OaL+Yy5mg/S\r\nCr3Qe8kK13OcDmvkX+9IP/7IVFplxVh+4BAqkpLgyB1cWq+y+qoU9YeW9RTG\r\nblZMiILLxkDZBDiKUfCZFq9T/u5xs82/Y0d34xR8mhistSe3sRPxlndXPM8v\r\nTONLq4qc/K9PTVQfVTaM6MCdTouKVXGwYmzQ0+KRGcH8/nmM6gGqt/9D+J2J\r\nLE3nyIsOgbE47qmqlgq4c5MojAGMhGRxa74L1149SY/1AV1ONNSN03pRoQNC\r\nv8YygHIY7lLmxzPvFIKKnhvkTb+ha15sJh0=\r\n=bGGU\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bemedev","email":"bri_lvi@icloud.com"},"directories":{},"maintainers":[{"name":"bemedev","email":"bri_lvi@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/x-matches_0.0.2_1668875066821_0.06499536244757054"},"_hasShrinkwrap":false},"0.0.3":{"name":"@bemedev/x-matches","description":"Better way to macth states in XState","author":{"name":"chlbri","email":"bri_lvi@icloud.com"},"version":"0.0.3","license":"MIT","main":"lib/index.js","typings":"lib/index.d.ts","module":"lib/index.mjs","engines":{"node":">=12"},"keywords":["state","xstate","Statevalue","beme.dev","condition","logical","matcher"],"scripts":{"config":"pnpm install","rollup":"rollup -c","prepare":"husky install","build":"rm -rf lib && pnpm run rollup","test":"vitest run --passWithNoTests","test:watch":"vitest --passWithNoTests","remove":"rm -rf lib node_modules pnpm-lock.yaml","clean":"pnpm run remove && pnpm run config","prettier":"prettier --write \"src/**/*.{ts,tsx}\"","eslint":"eslint \"{src/**/*,App}.{ts,tsx}\"","lint":"pnpm run prettier && pnpm run eslint --fix","lint-watch":"onchange --await-write-finish 5500 \"**/*\" -- pnpm run lint","postpublish":"git fetch & git pull","prepublishOnly":"pnpm run build && pnpm run lint"},"devDependencies":{"@typescript-eslint/eslint-plugin":"^5.43.0","@typescript-eslint/parser":"^5.43.0","esbuild":"^0.15.14","eslint":"^8.27.0","husky":"^8.0.2","onchange":"^7.1.0","prettier":"^2.7.1","pretty-quick":"^3.1.3","rollup":"^3.3.0","rollup-plugin-dts":"^5.0.0","rollup-plugin-esbuild":"^5.0.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.9.3","vite":"^3.2.4","vite-tsconfig-paths":"^3.5.2","vitest":"^0.25.2"},"dependencies":{"@bemedev/decompose":"^0.1.6"},"gitHead":"908a86b7b2b4fc0ac416c8a2918952a69832d800","_id":"@bemedev/x-matches@0.0.3","_nodeVersion":"16.18.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-HdFJrJPG4WKrskoeHvOqqjyep1PeqVgw33BZ2iDXCKtFQOFzrFkbiRP/ksFmw3IFTNFbXDUq88xiinVWz9QeoQ==","shasum":"81b0e7d28cce611172047850fa6851cf3959b2b8","tarball":"https://registry.npmjs.org/@bemedev/x-matches/-/x-matches-0.0.3.tgz","fileCount":8,"unpackedSize":13693,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA4fdNGSXdMi3F9PxYdrAgOMDEwTH9azW94ys02w+TPNAiAK0Q5HEYziVDokeJWksid0OPHj5mojgcBl/O7fi+AbLw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjeQSoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmot8w/6AqlUzRS3Fg1XrXpQkbfKjKrp7InaTBbVXevYlPp7+AFjytOE\r\ndp8eOejdgQ1af6GVvXYM3PGiK/LIl76hcSv9CSz1atJwaP6Dn1UQOZCfFj0n\r\n1kOeqJnBWI/AIZxFRbPyvDLIGPvkPb7brNCRUYQBMtZ7egfCSojrBgSfQXAy\r\nsRcRQf/txcjYmTCfz8zlbiT6eNPHZIyUmO2Vft/YSBipimALiR0nab9sdHjZ\r\nrBrZiD79ZYHQ992XqA1JfwEkMsopPvYe1oq2AcZLYlpUmzgzyqidpG3HADr2\r\nYvN4HOQRTN5NKNcGVlE0PdMMdz6UWjO598tAUQllw2J5PNvHc0GNhnyMHsdu\r\nHpyYRQ7YCZqlOgFAAS2U8dwqonqRRoAGedtOzMHObr7cTAA83rR3lARvQCVx\r\n8nYCYgedaA97jZ8gbfU43iGSSkXtdX7L1+u0tmv6jn77++I1NPUl34Q5vxmd\r\nJWWk4u+NH/WjD2W38/18wKnNeD4fxUChAFF1NnN6eJOUHEXIwYd8D+yBRNE8\r\nfm0a6Q35xp2WcaXRe7Bghm2bjHijJEVCL8FUYanficRV3RCMniFL1RWv70Ie\r\nrH23vt67TFqYrW2lwldTYReVbURBf0W+m6z+xqf24KQZ2s9uo51SJ8AEQDHM\r\nW7G2FgY4rQbFfJq1D/KImLc4YWJX/AQ8NCQ=\r\n=GDE7\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bemedev","email":"bri_lvi@icloud.com"},"directories":{},"maintainers":[{"name":"bemedev","email":"bri_lvi@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/x-matches_0.0.3_1668875431851_0.7392602681076004"},"_hasShrinkwrap":false}},"time":{"created":"2022-11-19T16:21:22.715Z","0.0.1":"2022-11-19T16:21:22.946Z","modified":"2022-11-19T16:30:32.076Z","0.0.2":"2022-11-19T16:24:27.074Z","0.0.3":"2022-11-19T16:30:32.023Z"},"maintainers":[{"name":"bemedev","email":"bri_lvi@icloud.com"}],"description":"Better way to macth states in XState","keywords":["state","xstate","Statevalue","beme.dev","condition","logical","matcher"],"author":{"name":"chlbri","email":"bri_lvi@icloud.com"},"license":"MIT","readme":"# Better way to macth states in XState\n\n## Short introduction to Xstate\n\nXState is a implementation of **[Statecharts](https://pdf.sciencedirectassets.com/271600/1-s2.0-S0167642300X00603/1-s2.0-0167642387900359/main.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEBUaCXVzLWVhc3QtMSJHMEUCIEB%2FNdTHRam3xNVGmmPL0%2FayP3NvYHO1D8sj4SWPQ3OcAiEAt5CmjX%2F2aG%2FKnGT66QvIP3a3NcRX8wEKqwlhshUUGrwqzAQIHhAFGgwwNTkwMDM1NDY4NjUiDMXwLhKk1sRLhyhfOSqpBEIPiTot8g1J8zdeJCNgjWtrMa0S%2Bknjzcu9xSHr%2FdVgAxZOC0bOMXquOvW9xObg44pb4UqMojiE%2FodGJTkkvFMPjOEaeXgcmo2XQVwXpHbraWx%2BE5VYcIV9bucK%2FdWoAXWHo40MPCeInyZBbQKl2GPCsCYEzocuDZjvOoaM6VZde5Z6jvJWn%2FA5v3NkpI7V0oCTf6KZ%2FxnH3A8lfrA1Bmhi3itU2XOFF0LrrzH2qyuSR2JtfxUcb1sxfLUGGV8eBQfESDJqBx7L%2FdUsl9Ce%2B4u6e5SaNA01cxoeY%2B0DMlOI2fZNgIKYs%2FUHNmlwrHMPLIEL7Z3jy3bu2kVGafnVPFYc%2FeDUW78nwWcJ%2BW%2BKuxspY5gznbpUN7zBNPkvDP5XdpsWSEPFmnhqapJBK1aaeoMEskW7vbIgpDUCZY2D527Yus%2B1TefQHm38YJxTskSw%2FicxSkeq3ABQxG7Fwn9VkttCTsOLvTFkuJl4thvlx0WIUdwS13PmPK9VEgemABvZMJvVy3z1tudu3agS8q6K%2BcQnBB4B9IhpRIukJAAheOKfrMaTKTdU93iDilW6AnIuZ2dKsHynnfnfNsxwC%2BD6hnuZoXAhaIUcff5hR7vHX6toZNHUS%2BFSkkrcA0%2FxgIss5gbmkabeQyfOssWwc30Bxk6i6bfTGC8j7Rvd3bAsmos6fZRWN8%2BNk0sYrhvJYj4pAvNkpCYGq15VeOg2GVQk7wCFqPW7HYm%2FZbQwno3VmwY6qQE7vSGyeB6%2Bmd%2FcEQ27oKW%2BgWDKHB5xL%2B8cEK4MX96H5P8abhXcWjyvxIJvNJVAMbTb7DT0GcOSJFhIPImoJWIHjapfCQxmGYb0oShHzTP%2FbN5LK0EJOKVXiyvX%2BYywO0XG43terk0jyy1ZpGXyLNp08pVB4VhUg5lWsnKzrJAmRVF7EzIG8Bjs5TvcN4j61EIs26X4AgEvOy10PvYG4S9aaK00NR9vFVA9&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20221116T215907Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Credential=ASIAQ3PHCVTY2MTPPP4O%2F20221116%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=e38488438afd037f4d7de8bd8c6e071df44e6d26ff23ba61e79928a00f024fda&hash=1d4916fd19d0ddcc9b139fe8d9c5052866814462f95b805f093f9a4d47b8a745&host=68042c943591013ac2b2430a89b270f6af2c76d8dfd086a07176afe7c76c2c61&pii=0167642387900359&tid=spdf-c523505d-2eea-4eae-9af4-1ae83f797e0d&sid=f2a0ff886e08b945ac4ab6570af7d8e4159bgxrqb&type=client&ua=51550752590b00010157&rr=76b37defb947f840)**, a graphical way to represent complexity in code. Every you need to know is inside the [docs](https://xstate.js.org/docs/).\n\n<br>\n\n## Problems\n\n- [x] Orthogonal/parallel state\n\n> To matches a parallel state, you need to put as parameter an entire object. Generally, you only need to know if the state is inside a child or a grandchild of the current state. XState is recursive, so for a small check, you can write a deep recursive object as parameter with infinite nested children.\n\n- [x] Compound state\n\n> It’s the same problem as orthogonal but with less complexity. Here, I want to emphasize the problem of nested objects. Sometimes you only need to know if the state is inside the parent and you don’t care about the children. But in the current configuration of\n[state.matches](https://xstate.js.org/docs/guides/states.html#state-matches-parentstatevalue), you need to put as parameter and the nested **current** children.\n\n- [ ] Direct implementation polyfill for core XState\n\n> Not yet implemented\n\n<br>\n\n## The solution\n\nA function to match with string representation of the current state or parent, or grandparent 😌😵‍💫, or… You see where I want to go!\n\nI listed the cases inside this code block :\n\n```typescript\nimport buildMatches from '@bemedev/x-matches';\n\n// Case 1 -> simple state\nconst simpleMatch = buildMatches('idle');\n\n// Case 2 -> compound state\nconst compoundMatch = buildMatches({\n  fetching: {\n    parent: 'child',\n  },\n});\n\n// Case 3 -> parallel state\nconst parallelMatch = buildMatches({\n  auth: {\n    /* ... */\n  },\n  fetching: {\n    /* ... */\n  },\n});\n\n// The resulting function accepts a param array :\nparallelMacth('auth', 'fetching');\ncompoundMatch('fetching', 'fetching.parent', 'fetching.parent.child');\n```\n\n<br>\n\n## Add-ons\n\nWe add possibilities to do logical \"or\" and logical \"and\"\n\nCode example:\n\n```typescript\nimport buildMatches from '@bemedev/x-matches';\n\n// Case 3 -> parallel state\nconst matches = buildMatches({\n  auth: 'notAuthenticated',\n  fetching: {\n    cache: 'nodata',\n    backend: 'data',\n  },\n});\n\nmatches({ or: ['auth', 'fetching.cache.data'] }); // => true\n\nmatches({\n  and: ['auth.notAuthenticated', 'fetching.cache.data'],\n}); // => false\n\nmatches(\n  {\n    and: ['auth.notAuthenticated', 'fetching.cache.data'],\n  },\n  'auth',\n); // => false\n\nmatches(\n  {\n    or: ['auth', 'fetching.cache.data'],\n  },\n  'fetching',\n); // => true\n\nmatches({\n  and: [\n    {\n      or: ['auth', 'fetching.cache.data'],\n    },\n    'fetching',\n  ],\n}); // => true\n```\n\n**NB** : _The param array acts like a logical \"and\"_\n\n### Live documentation [here](https://github.com/chlbri/x-matches/blob/dev/src/index.test.ts)\n\n<br>\n<br>\n\n_Enjoy your [function](https://github.com/chlbri/x-matches)_ ✌🏾😎 _!_\n","readmeFilename":"README.md"}