{"_id":"@5alid/match","_rev":"1-59ca1e260fc95a5a18b9be5b0d4d217e","name":"@5alid/match","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.1":{"name":"@5alid/match","version":"1.0.1","description":"pattern matching function","types":"index.d.ts","main":"index.js","publishConfig":{"access":"public"},"scripts":{"prepublish":"npm version patch && git push -u origin master && tsc","test":"jest","test:watch":"jest --watchAll"},"repository":{"type":"git","url":"git+https://github.com/5alidz/match.git"},"keywords":["pattern","matching"],"author":{"name":"5alid"},"license":"ISC","bugs":{"url":"https://github.com/5alidz/match/issues"},"homepage":"https://github.com/5alidz/match#readme","devDependencies":{"@types/jest":"^25.2.3","jest":"^26.0.1","ts-jest":"^26.1.0","typescript":"^3.9.5"},"gitHead":"81f584bffab10e23d6832d2973e4bbff1137b8f2","_id":"@5alid/match@1.0.1","_nodeVersion":"13.14.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-v5ICKsl7rlCOm4x6K16Gs8LesRne3hg2ByS02HxZkLWH2d+gWI9hh+NBQ3yIyM/CBpdJZHrVro4ZcReobquPdQ==","shasum":"64761a15b25f411b5f89e7b9553455bb8b2be308","tarball":"https://registry.npmjs.org/@5alid/match/-/match-1.0.1.tgz","fileCount":4,"unpackedSize":3224,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfF1w/CRA9TVsSAnZWagAA53AQAJk0kjAouLj1AOwixhOy\nv94Pe3cbm7PiDf3t/LiaZQFgpwZ05bz5yBFTTWbLsNWNrA2FZwCZodoFfcco\n9my6AVB0Ozc413fh4wnS9EDAQa9XrGwrgc/dliTEpDRuxmv5fvhhGqBQRRoj\nHwfVEV0GaUFTx0dIgw7pwieBiDHxepMoQnG528ynQm8nDVUpnoVqAU4yXvcu\n97IqM9YBlyx00qCh2Byuo4pY5xJNouLyOtGXfP69OhxM9Qx6JdjF1YcV3M55\nPNaJZSyfSOM00EFJEead6x1nzKBdNHN4eKOw+A14gCRQCmm1jZQcD4H8mktM\nZR7evmhfgBhiHBts9Mb9oKCgHRGAo/jff4g/Mx5WnGnsFK1/WS3m3uJ/X9KJ\nw0P8pLx+se00atvKf+fkMMbhZt2ibgLTp7ylWf92LaX02DVBOPTcxpTWdFfZ\nb9wXPTHKe+K2uvM9goiAHF2mQEtbGzhhYuTuLKuYHDdL4IQgxVDp7x17Q5ZQ\nuIf7SNykEUCeAvO/yAc1+PtCljtDyLppqdE7f5Q/1Pnmy/6Mz5H4N7u9QYkz\nEI14uuuahCdhEOcD0OuipvKLSbgqKtAMNXFpB/zicYo8BKuoqy0dS5Biwly2\nNsvYvqv9A9sCCtmtJR6r0lY223jTWpl/yGu02q+RDzxSqaDsCXZrClyUdIm0\nutJW\r\n=zzPH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdlcDPB8KSX6HBxnPQwcIUfkAxRzYIiHpYPM4ktVTIqAIhANuyz3CHkIiFLZ50u/d3hwEg+liEPTbwkcKV2Md5IYA0"}]},"maintainers":[{"name":"5alid","email":"kzack_dev@hotmail.com"}],"_npmUser":{"name":"5alid","email":"kzack_dev@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/match_1.0.1_1595366463291_0.5573297760480649"},"_hasShrinkwrap":false}},"time":{"created":"2020-07-21T21:21:03.255Z","1.0.1":"2020-07-21T21:21:03.470Z","modified":"2022-04-04T10:48:18.484Z"},"maintainers":[{"name":"5alid","email":"kzack_dev@hotmail.com"}],"description":"pattern matching function","homepage":"https://github.com/5alidz/match#readme","keywords":["pattern","matching"],"repository":{"type":"git","url":"git+https://github.com/5alidz/match.git"},"author":{"name":"5alid"},"bugs":{"url":"https://github.com/5alidz/match/issues"},"license":"ISC","readme":"## Installation\n\nnpm `npm i @5alid/match`\nyarn `yarn add @5alid/match`\n\n## Usage\n\n```js\nimport match from '@5alid/match';\n\nlet num = 1;\n\nlet matched = match(num)(\n  ['_', 'error'], // default case\n  [0, () => 'zero'],\n  [1, () => 'one'],\n  [2, () => 'two'],\n  [3, () => 'three']\n); // -> 'one'\n\nnum = 4;\n// this will return 'error'\nmatch(num)(\n  ['_', 'error'], // default case\n  [0, () => 'zero'],\n  [1, () => 'one'],\n  [2, () => 'two'],\n  [3, () => 'three']\n); // -> 'error'\n```\n\n### Use Cases\n\n#### reducers\n\n```js\nfunction stateReducer(state, action) {\n  return match(action.type)(\n    ['_', () => state],\n    ['setSomeProp', () => ({ ...state, someProp: action.payload })],\n    ['setOtherProp', () => ({ ...state, otherProp: action.payload })]\n  );\n}\n```\n\n#### jsx\n\nexample button that fetches async data\n\n```jsx\nfunction Status() {\n  const [status, setStatus] = useState('IDLE');\n  const [data, setData] = useState([]);\n\n  useEffect(() => {\n    if (status == 'FETCHING') {\n      fetch(api_url)\n        .then((res) => res.json())\n        .then((json) => {\n          setData(json);\n          setStatus('SUCCESS');\n        })\n        .catch(() => setStatus('ERROR'));\n    }\n  }, [state]);\n\n  return (\n    <button onClick={() => setStatus('FETCH')}>\n      {/* standard way to handle conditions expression */}\n      {match(status)(\n        ['_', () => 'Something went wrong'],\n        ['FETCHING', () => '...'],\n        ['IDLE', () => 'idle'],\n        ['SUCCESS', () => 'Done'],\n        ['ERROR', () => 'Something went wrong']\n      )}\n    </button>\n  );\n}\n```\n","readmeFilename":"README.md"}