{"_id":"@derbent-ninjas/invariant-composer","_rev":"2-faffe9aaa50337330f24b2b91a08fbfb","name":"@derbent-ninjas/invariant-composer","dist-tags":{"latest":"0.0.7"},"versions":{"0.0.5":{"name":"@derbent-ninjas/invariant-composer","version":"0.0.5","description":"Useful tools for validation by composing invariants","scripts":{"build":"rm -rf dist && tsc -p tsconfig.build.json","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/derbent-ninjas/invariant-composer.git"},"keywords":["validation","validator","invariant","composition"],"author":{"name":"@derbent-ninjas"},"license":"MIT","bugs":{"url":"https://github.com/derbent-ninjas/invariant-composer/issues"},"homepage":"https://github.com/derbent-ninjas/invariant-composer#readme","devDependencies":{"@types/jest":"^28.1.6","jest":"^28.1.3","ts-jest":"^28.0.7","typescript":"^4.7.4"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["**/*.(t|j)s"],"coverageDirectory":"../coverage","testEnvironment":"node"},"types":"./index.d.ts","gitHead":"0552a15a35f053bacad0ce01e2ffeacef517a091","_id":"@derbent-ninjas/invariant-composer@0.0.5","_nodeVersion":"17.9.0","_npmVersion":"8.5.5","dist":{"integrity":"sha512-AUMJcqISs7ZT8XHTN61zz8f2v8qLNM+EZbtDBjXVUltfEqJ1ihaTPik3w3Z8EQlymkmDb0MvgHU+ohAt0jGIJA==","shasum":"7d01fb0146947d4a7c0d6386c8c18fa35140478a","tarball":"https://registry.npmjs.org/@derbent-ninjas/invariant-composer/-/invariant-composer-0.0.5.tgz","fileCount":27,"unpackedSize":13199,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBkIwPJfzF5gNJu4MuSyLKrrvnEYsR0foMDqk5aNyOweAiEAhupy0Vr9ZBtrFLFYMkI+0NJO+VeA7vduVYPHMf5m9ZA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2AgvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqTEg/8CRMIat2D0EFCxmRlxLb1ekFUN4nQT25S6YrXOBAJrkfHQhYo\r\nbV6wi7dBbwvpu/xlebHMxZxeTOCcOiaKUC1g7GEPuLwuduIWrub3ikwfXT5D\r\nA6XYtDlOyEV6EGKLY0OhtiME35sNwPtpX5VkowiaPhN8wHqiljrOAfvn7zYW\r\nGtUzuXfKhu+lvJ+3BchrDz3bwmPQ7njGYGUOYiU0H7t3j8aKsSMd8Tf+c+4d\r\n4eoDWjXAtA+TGFfuwiTI20nvB6nV7n3aUmpc348VhUQjI4fiIBW1Njdi6dgs\r\napewaC69Rr+3GAhpZQmpfs3dmguZmf9ee+vpD8W9mH6IIsN8Oe75lK7khCkj\r\nHAwzdAKKkGn1EQ66vh9s+ZQN8mbY3/IC9o01CB1MnR6NV1ZgHm9t+oEupJvd\r\nLcSU02Wym2UgdGPyoq7kxMydxAk4r/UCrbHpRP0tg9i+Kztw3wFW7VmQebBx\r\nS97xnBN3qBUjObeYMJjz779mbfsfzzPpfeQJYO76GnPYFEsnBAZwD9+1lkac\r\niyUpt/W7esYjMILtUypnAGjEb8Dv4+PQHEMlNuu9AwQG9nd9UyVeq93UZ+9i\r\nF1+cnXkhfdYqY49mR38wDeoIsouOUh+1mNUOjAyCtNS7DuO3QJFrY3Zak9LX\r\nZYesAjJY9IDdrAT4GDbQpbyIm33KKD66CNA=\r\n=S+uz\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bota","email":"botakiller@mail.ru"},"directories":{},"maintainers":[{"name":"bota","email":"botakiller@mail.ru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/invariant-composer_0.0.5_1658325039578_0.8273111233289752"},"_hasShrinkwrap":false},"0.0.6":{"name":"@derbent-ninjas/invariant-composer","version":"0.0.6","description":"Useful tools for validation by composing invariants","scripts":{"build":"rm -rf dist && tsc -p tsconfig.build.json","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/derbent-ninjas/invariant-composer.git"},"keywords":["validation","validator","invariant","composition"],"author":{"name":"@derbent-ninjas"},"license":"MIT","publishConfig":{"registry":"https://npm.pkg.github.com","access":"public"},"bugs":{"url":"https://github.com/derbent-ninjas/invariant-composer/issues"},"homepage":"https://github.com/derbent-ninjas/invariant-composer#readme","devDependencies":{"@types/jest":"^28.1.6","jest":"^28.1.3","ts-jest":"^28.0.7","typescript":"^4.7.4"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["**/*.(t|j)s"],"coverageDirectory":"../coverage","testEnvironment":"node"},"types":"./index.d.ts","gitHead":"dd2a109c636b73cc6e603d658b978317a9e61cc9","_id":"@derbent-ninjas/invariant-composer@0.0.6","_nodeVersion":"17.9.0","_npmVersion":"8.5.5","dist":{"integrity":"sha512-qlr0dLjVmecPypMgSXUxJCVkNTl2UlXDnhI91f61aOFTr6fWh/55Ixkj1CL0YSQwCScmXb6Ek/zmLNVdxkGKvg==","shasum":"b8264e0aacf4783a4edb8088b9267158b8e6cdc1","tarball":"https://registry.npmjs.org/@derbent-ninjas/invariant-composer/-/invariant-composer-0.0.6.tgz","fileCount":43,"unpackedSize":20448,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIATVbGcjhTHysI/GrAv1doFFnsQZ76qgHpIMYIm35L9NAiEAgweVESSHWZt2oxbNSE29jyINAdFeopGKDzfrh0ZK+kY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi4bdsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpiAw/+IHtC8TBSbl55Ala/winK7bNXpifuGR3Wp1M4diMuHOTydBJ8\r\nz4BjORpHChYw3ZOT53tyzHtXuSPbspLZGaOHTQgvxoZWNhrpYPy+QUn/Vj0I\r\nYPHYeso9QzxSQmvmqsBoMFzHxKarshCnZS9OflHCyKX0VJ15Rcc4o1Fnz6Hx\r\nvedOLtK8UOZhaIqxPgwDfLzg+MIPDYGeRlILgLvA3y+rud1I8dEZRxXoDpKI\r\nbgf5z0WT8F4bwMQvxLeA2h+8Zbrt7kZ0e9begOEBZTZt44SxPKNDCcLOnB77\r\n+KN8DI3l5jK2Ff9FRDYDTANm4OdTjxxBLE6uvdYai11GrbgqrnBXQDWbOcRS\r\noi6lhUxK/Al0WR3I2dof7O1/TSvH+4TH6GKtaU04ZcdR6GbZubDupniqQF5g\r\nQkykbt+g2oPBMGoei6lbzWvaptqS5QNBEyaf0alOhOAOXxHTtABMOZXeU4vS\r\nOhJ6T6mKXJXUXENvzcCN7w0+r6kVAZkjcusF5FvuB3eIdsAzYJPzZ9xy5Odl\r\nm6pbntpAJM/04/vAg4eshuoRx/2k1ePJANx8DKOzvOYYdipOHtyn0VrKsey5\r\nhfC6ognZ3wuv4KavqpmWMLmE7Qn4gmCvTiQ2r4V0kBKBpIpeqRUB8kLnfewo\r\n+GPRZ3RQkCwau79o9Mj/dsC182kCOkXg0BY=\r\n=LOkm\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bota","email":"botakiller@mail.ru"},"directories":{},"maintainers":[{"name":"bota","email":"botakiller@mail.ru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/invariant-composer_0.0.6_1658959724673_0.8421865947305447"},"_hasShrinkwrap":false},"0.0.7":{"name":"@derbent-ninjas/invariant-composer","version":"0.0.7","description":"Useful tools for validation by composing invariants","scripts":{"build":"rm -rf dist && tsc -p tsconfig.build.json","publish":"npm publish --access=public && npm publish --access=public --@derbent-ninjas:registry=https://registry.npmjs.org","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/derbent-ninjas/invariant-composer.git"},"keywords":["validation","validator","invariant","composition"],"author":{"name":"@derbent-ninjas"},"license":"MIT","publishConfig":{"registry":"https://npm.pkg.github.com","access":"public"},"bugs":{"url":"https://github.com/derbent-ninjas/invariant-composer/issues"},"homepage":"https://github.com/derbent-ninjas/invariant-composer#readme","devDependencies":{"@types/jest":"^28.1.6","jest":"^28.1.3","ts-jest":"^28.0.7","typescript":"^4.7.4"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["**/*.(t|j)s"],"coverageDirectory":"../coverage","testEnvironment":"node"},"types":"./index.d.ts","gitHead":"f9cbd72861e648668e6ef70058ee17acf1535edd","_id":"@derbent-ninjas/invariant-composer@0.0.7","_nodeVersion":"17.9.0","_npmVersion":"8.5.5","dist":{"integrity":"sha512-kmwacag5c/M6XSrJ8zgqTFAEu7mple5DiMWhy7+0IvCNsoRAaIhU0stfTehSprx6quX2DD9Vm7mbyAx9GPNyHA==","shasum":"2fbe0e415af50a7d2c34e041ff637d4370f47c93","tarball":"https://registry.npmjs.org/@derbent-ninjas/invariant-composer/-/invariant-composer-0.0.7.tgz","fileCount":49,"unpackedSize":25019,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBpCL8au1X3m/BmpdMqE7xgsL0iyPXNfvBznZq0Qzc6GAiEAuuMCDwnamfAMQeSqkXvoGw5F097+WX/4WRHtue8qCpk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi5X55ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqc0BAAofo6mGdFe253/InveGQ0MZk74VXocJYz1KurJF1kNsaE7ShF\r\nhJTsxzVJm4xNVSEmueI8WkQd1n173AoCmKGuBD+C5v1K1gX5BWtjyC4GoXBE\r\nJBSxDqgqWaMuf3E9nsM/5pllFax4K3hYoOpVm93ljO9i+jhYpm2eetWVzTrV\r\nezztUxHWwKtrTLutfMIVbIBmpOjoUxBHvsJlPDkGSwya5Yq9b4oTn64BUlv4\r\n4VzIEOVSBDCWP+zScu9B8LpgI4VxHarkHlP14YjVWy9y2ahEgp9NRrcIPFZ3\r\n0dmvmLam+uFccweuqfTM107QVNBYOznd+5XsTF36glyeHCIEaXiwpywKwOGM\r\nq7V9CUXn1qGAbN4xNEEibqSWu1/y0ow05YLq3fXp3KAqKI2O/eSO49MoRMGy\r\nQtvQYFj87+Ki/tsiis5AVJtafcf9J8G/nzALTIJkRR+jNwx/yy1vTI/MI89k\r\nBqgjqDvxnGQlP3n358QamtaGmoW8dMKr6zlnyiKm6SwhxnfyfuP5DCaeF38f\r\nc4fodl267sn4grbSO3HNnja3DvqIKcz9psPjBQm5QNN9nYRQmw1sKm96Ku15\r\nKkUURCw4njCOLTS1URJCTr5pKreWtQImZjfVdOeGYjqiyHSWk4KaIj62IgnD\r\n/P2hgjOIIzbS1HXG6mgcTO9ldacKG64wU2Y=\r\n=DmxW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bota","email":"botakiller@mail.ru"},"directories":{},"maintainers":[{"name":"bota","email":"botakiller@mail.ru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/invariant-composer_0.0.7_1659207288933_0.3637749984507219"},"_hasShrinkwrap":false}},"time":{"created":"2022-07-20T13:50:39.514Z","0.0.5":"2022-07-20T13:50:39.773Z","modified":"2022-07-30T18:54:49.198Z","0.0.6":"2022-07-27T22:08:44.838Z","0.0.7":"2022-07-30T18:54:49.113Z"},"maintainers":[{"name":"bota","email":"botakiller@mail.ru"}],"description":"Useful tools for validation by composing invariants","homepage":"https://github.com/derbent-ninjas/invariant-composer#readme","keywords":["validation","validator","invariant","composition"],"repository":{"type":"git","url":"git+https://github.com/derbent-ninjas/invariant-composer.git"},"author":{"name":"@derbent-ninjas"},"bugs":{"url":"https://github.com/derbent-ninjas/invariant-composer/issues"},"license":"MIT","readme":"# invariant-composer:\n### What is it?\nThis library provides utilities which allow you to compose validation invariants into invariants trees. And it gives you detailed information about failed invariants, their path, their error messages and other information which you can pass.\n\n----\n\n### Get started:\n#### Install:\n```\nnpm install @derbent-ninjas/invariant-composer\n```\n#### Usage:\nCreate validation functions which return invariants, it can be either `fail` or `success`:\n\n```typescript\nconst invariant1 = (): Invariant => {\n  return success()\n}\n\nconst invariant2 = (): Invariant => {\n  return fail({ message: 'invariant 2 fails, because of something' })\n}\n\nconst invariant3 = (): Invariant => {\n  return fail({ message: 'invariant 3 fails, because of something' })\n}\n```\n\nThen you can compose this invariants as a tree:\n```typescript\ndisplay(\n  path('deepnessA', compose(\n    path('deepnessA-B1', invariant1()),\n    path(\n      'deepnessA-B2',\n      compose(path('deepnessA-B2-C', invariant2()))\n    ),\n    path('deepnessA-B3', invariant3()),\n  ))\n)\n```\n\nResult:\n\n```json\n{\n  \"status\":\"FAIL\",\n  \"info\": {\n    \"paths\": {\n      \"deepnessA.deepnessA-B2.deepnessA-B2-C\":[{\"message\":\"invariant 2 fails, because of something\"}],\n      \"deepnessA.deepnessA-B3\":[{\"message\":\"invariant 3 fails, because of something\"}]\n    }\n  }\n}\n```\nLooks simple, doesn't it?\n\n-----\n\n### More functions:\n\n-----\n### ifExists\n\n#### `ifExists<T>(property: T, invariantFn: (property: T) => Invariant)`\nExecutes invariant function only if passed value is not undefined. Otherwise, returns success() invariant.\n\n```typescript\nifExists(name, isNameValid)\n```\n\n-----\n### assert\n\n#### `assert(path: string, invariant: Invariant)`\n\nthrow `InvariantError` if passed invariant is fail.\n\n```typescript\nconst canCreateName = fail({ message: 'name is not valid' });\nassert('name', canCreateName);\n```\n\n-----\n### isInvariantError\n\n#### `isInvariantError(value: any)`\nreturns true is passed value is invariant error.\n\n```typescript\nisInvariantError(error)\n```\n\n-----\n### Guard\n\n#### `@Guard(canActivateFn: (*arguments of decorated function*) => Invariant)`\nDecorator which throws an `InvariantError` if passedCanActivate function returned fail invariant.\n\n```typescript\nclass Cat {\n  name: string;\n  \n  @Guard(canSetName)\n  setName(newName: string) {\n    this.name = newName;\n  }\n}\n```\n\n-----\n\n\n### LICENCE:\n\nThis library is [MIT licensed](https://github.com/derbent-ninjas/invariant-composer/blob/main/LICENCE)\n","readmeFilename":"README.md"}