{"_id":"@blacklane/sarcastic","_rev":"6-de662d82ccfc41e72518c8b870433fe9","name":"@blacklane/sarcastic","dist-tags":{"latest":"1.5.1"},"versions":{"1.5.0":{"name":"@blacklane/sarcastic","version":"1.5.0","description":"Cast unknown values to typed values","main":"index.js","repository":{"type":"git","url":"git+https://github.com/jamiebuilds/sarcastic.git"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"license":"MIT","keywords":["type","flow","cast","assert","assertions","immutable"],"files":["index.js"],"scripts":{"test":"flow && ava"},"devDependencies":{"ava":"^0.25.0","flow-bin":"^0.74.0"},"gitHead":"439751a375ac7556522656cb3199fa8132683290","bugs":{"url":"https://github.com/jamiebuilds/sarcastic/issues"},"homepage":"https://github.com/jamiebuilds/sarcastic#readme","_id":"@blacklane/sarcastic@1.5.0","_npmVersion":"6.2.0","_nodeVersion":"8.6.0","_npmUser":{"name":"blacklane-dev","email":"it-lambda+npm@blacklane.com"},"dist":{"integrity":"sha512-wmjBUwzjjH++erlJL0IoYotS43+SAADxcliKp+dOZZzugWrLJdosy+U5qRliPZC9OJMZFVmsBrsPd5E7jUWdww==","shasum":"73530f08205f48daf68b6977bec949271cb1e807","tarball":"https://registry.npmjs.org/@blacklane/sarcastic/-/sarcastic-1.5.0.tgz","fileCount":4,"unpackedSize":12198,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbaMaCRA9TVsSAnZWagAAZSEP/RNY5eTe3BFMh8sDLP1r\nWwDuV0rPKON+PXXtbwEi1yXmNJfNokaddFCKe6dQyUaNDvUs/M5g556g+FvE\nZGpk+Xpgloz/X5pmtL6H5CEksuGa7sR0xiBqpzrP07ygvMdOuWsxGbqfqTDW\nFW2AOPkzoc20WZi4+Bw0MNK3Tx3AAaWo/tUn72jH60kyH5c4frtnFDBdAskL\nljNdWmVI2uim0BAlc4IzgUKbD/agceMH3jBkQrGq+KLWdkQmFXbYYF1bPQu3\nPMiwM6gUHIJKOt9JGueeOPpvmMM9wCNpOxIrbA/JBbVemzdEcFOu+eQhM5Kx\nS97yRId8ri9Xsd4PusSpS9DUHw72QeOoSZh2WpOS/NfCXsXQ9SQkpw/9y0s0\nvnqAMpqKiBJu9bTY3YKmU7GJdBaT7PEejLmeCy2EbojvzoBar1pbMb3L3csq\n78jUnypyNcHRhO4tnHrVryjYHQbL/Skbuen/xthuF0t7pTWkBugUnP6muw5K\nD5psRXEkUFPG0C/K9fEBGwhS3JQfqScGDY9Djr9UNuTHWLFLvP61WMo1St+v\n9OBbeN3ZLOPxvhyMQYmHy2kXL0wHEiz+miD3QEOpOz84UEsufNs1EAJfq6pH\nW0egPqDlEROvzN/O3dbXdnAy5Rqj4tGSmpbIYNgF9UHcTJwsnbZia/BwJVqq\nqlim\r\n=S9EE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDK5zWQFPXm/m4PMM23PlwHO5JMalpP+8hMLNS9UHf6qgIhAIVbO2nNNma1RqoF+57z2TM32NXBxvwCar5acoU8XvEg"}]},"maintainers":[{"name":"blacklane-dev","email":"it-lambda+npm@blacklane.com"},{"name":"stereobooster","email":"stereobooster@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sarcastic_1.5.0_1533911834304_0.23947021665838686"},"_hasShrinkwrap":false},"1.5.1":{"name":"@blacklane/sarcastic","version":"1.5.1","description":"Cast unknown values to typed values","main":"index.js","repository":{"type":"git","url":"git+https://github.com/jamiebuilds/sarcastic.git"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"license":"MIT","keywords":["type","flow","cast","assert","assertions","immutable"],"files":["index.js"],"scripts":{"test":"flow && ava"},"devDependencies":{"ava":"^0.25.0","flow-bin":"^0.74.0"},"gitHead":"ac3f3786b6d5422a54fd9cc1213025bf09f73601","bugs":{"url":"https://github.com/jamiebuilds/sarcastic/issues"},"homepage":"https://github.com/jamiebuilds/sarcastic#readme","_id":"@blacklane/sarcastic@1.5.1","_npmVersion":"6.2.0","_nodeVersion":"8.6.0","_npmUser":{"name":"blacklane-dev","email":"it-lambda+npm@blacklane.com"},"dist":{"integrity":"sha512-yCFt5bpw6UoTc5ZZFJaKbZYjYpFU1OoXjiadGf3tGUXEAU3l0ez4Ct9V396VJ7NBB0KSdFkvZSa0fZf1ufpVrg==","shasum":"6a05a8bb965d123093116fbf9eba50ddb5f8cc63","tarball":"https://registry.npmjs.org/@blacklane/sarcastic/-/sarcastic-1.5.1.tgz","fileCount":4,"unpackedSize":13016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbdXyCRA9TVsSAnZWagAAfPAQAJyW+tn1YxGQvLRM203p\nK4S6oaWct0zc+hjjApE11Z2DNkZ29fSbIiqWr0FvjMNgvEz8ZqXWelHXE47A\nnrNBYgvYZM1l3S4/VR5ZP90h6fOQsXDYF86tYbVqt6df09tGbKGvBKYn0KD9\nVKv9R0c3aerYwSsr53WOCvnGZRkeikeDRn/a89sXShvSL+Eejl9FYzF1Eqkr\nzqARpO9wrin0umTqVpF+ci0UVrb5Sj1Sc+v9zjtt7m4zCYT2S8zLrv2xx8/F\ndrrz0VJqFJly7/nQkmL6EW/Tt65JyK1xmVKYDJiWWOiWbveVv9hpb8XM5255\neJyy/YzA1rgSy2XQnGkq0BTuXDKcQEqAfa4OHIdMqnb22HIDB6//AyBSlg/9\nNRaPRcwmOX9ktSC6h7WXLZrFvq8SrIbCVwv826lAqXk5D9gSWODGebSsr1Ec\n1W4OEWus+sIPutwUu5Ot0R6Zr+U5fdm2ZMCczWL0QyzCOjLV1GYFG2jwzE7U\nxOf6VK1zH4nZdJMpUJJ4Ca5ue+Oux6o//8gzioB/28O2/XPyZZzG/xJcrOUP\nXTryHF3PbsLRw9GwPv9JwT4AQTi6baRz3NnD4jtpBO40oPS6Lz/F4FQWpwuM\nyP8YHqvZSwQsGjqewNEQMYS15/a4cy+tyNXTRgo+Dre0lkw1xJZBwAGB1Rk4\nvCzt\r\n=l+gd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD98tEOJzTAc0rQSurMv4V//eNQ+9RQPPeoA7GCrDcszwIhAOKc+Qaye754RqFMK12OsOk870oG2x1rt+/R/AYueyBx"}]},"maintainers":[{"name":"blacklane-dev","email":"it-lambda+npm@blacklane.com"},{"name":"stereobooster","email":"stereobooster@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sarcastic_1.5.1_1533924850015_0.19198988471567757"},"_hasShrinkwrap":false}},"time":{"created":"2018-08-10T14:37:14.183Z","1.5.0":"2018-08-10T14:37:14.411Z","modified":"2022-04-04T19:20:41.741Z","1.5.1":"2018-08-10T18:14:10.117Z"},"maintainers":[{"email":"rodrigopqn@gmail.com","name":"rodrigoospinto"},{"email":"giulliano.bueno@blacklane.com","name":"giulliano.bueno"},{"email":"rocco@js.cr","name":"jsdotcr"},{"email":"it-tech-leads+npm@blacklane.com","name":"blacklane-dev"}],"description":"Cast unknown values to typed values","homepage":"https://github.com/jamiebuilds/sarcastic#readme","keywords":["type","flow","cast","assert","assertions","immutable"],"repository":{"type":"git","url":"git+https://github.com/jamiebuilds/sarcastic.git"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"bugs":{"url":"https://github.com/jamiebuilds/sarcastic/issues"},"license":"MIT","readme":"# Sarcastic\n\n> Cast unknown values to typed values\n\n- Asserts that a value matches the defined type\n- Returns a typed value\n- Copies the value for type safety\n\n## Install\n\n```sh\nyarn add sarcastic\n```\n\n## Usage\n\n```js\nconst is = require('sarcastic');\n\nconst PKG_SHAPE = is.shape({\n  name: is.string,\n  version: is.string,\n  private: is.default(is.boolean, false),\n  scripts: is.maybe(is.objectOf(is.string)),\n  bin: is.maybe(is.either(is.string, is.arrayOf(is.string))),\n});\n\nlet pkg = is(require('./package.json'), PKG_SHAPE);\n// {\n//   name: \"sarcastic\",\n//   version: \"1.0.0\",\n//   private: false,\n//   scripts: { \"test\": \"ava\" },\n//   bin: null\n// }\n```\n\n**With strict typing:**\n\n```js\nimport is, { type AssertionType } from 'sarcastic';\n\nconst PKG_SHAPE = is.shape({\n  name: is.string,\n  version: is.string,\n  private: is.maybe(is.boolean),\n  scripts: is.maybe(is.objectOf(is.string)),\n  bin: is.maybe(is.either(is.string, is.arrayOf(is.string))),\n});\n\ntype PkgShape = AssertionType<typeof PKG_SHAPE>;\n\nfunction assertPkg(pkg: mixed): PkgShape {\n  return is(pkg, PKG_SHAPE, 'pkg');\n}\n\nlet pkg = assertPkg(require('./package.json'));\n```\n\n## API\n\n### `is(val, assertion, name?)`\n\n```js\nis(true, is.boolean);\nis(true, is.boolean, \"example\");\n```\n\n### `is.boolean`\n\n```js\nis(true, is.boolean); // returns true\nis(false, is.boolean); // returns false\nis(42, is.boolean); // throws instanceof is.AssertionError\n```\n\n### `is.number`\n\n```js\nis(42, is.number); // returns 42\nis(NaN, is.number); // returns NaN\nis(true, is.number); // throws instanceof is.AssertionError\n```\n\n### `is.string`\n\n```js\nis(\"\", is.string), \"\"); // returns \"\"\nis(\"hi\", is.string); // returns \"hi\"\nis(true, is.string); // throws instanceof is.AssertionError\n```\n\n### `is.array`\n\n```js\nis([], is.array); // returns []\nis([1, 2, 3], is.array); // returns [1, 2, 3]\nis({}, is.array); // throws instanceof is.AssertionError\n```\n\n### `is.func`\n\n```js\nis(() => {}, is.func); // returns () => {}\nis({}, is.func); // throws instanceof is.AssertionError\nis(/regex/, is.func); // throws instanceof is.AssertionError\n```\n\n### `is.object`\n\n```js\nis({}, is.object); // returns {}\nis({ foo: true }, is.object); // returns { foo: true }\nis([], is.object); // throws instanceof is.AssertionError\nis(null, is.object); // throws instanceof is.AssertionError\n```\n\n### `is.arrayOf(assertion)`\n\n```js\nis([], is.arrayOf(is.number)); // returns []\nis([1, 2, 3], is.arrayOf(is.number)); // returns [1, 2, 3]\nis({}, is.arrayOf(is.number)); // throws instanceof is.AssertionError\nis([\"hi\"], is.arrayOf(is.number)); // throws instanceof is.AssertionError\n```\n\n### `is.arrayish(assertion)`\n\n```js\nis(1, is.arrayish(is.number)); // returns [1]\nis([], is.arrayish(is.number)); // returns []\nis([1, 2, 3], is.arrayish(is.number)); // returns [1, 2, 3]\nis(\"hi\", is.arrayish(is.number)); // throws instanceof is.AssertionError\nis({}, is.arrayish(is.number)); // throws instanceof is.AssertionError\nis([\"hi\"], is.arrayish(is.number)); // throws instanceof is.AssertionError\n```\n\n### `is.objectOf(assertion)`\n\n```js\nis({}, is.objectOf(is.boolean)); // returns {}\nis({ foo: true }, is.objectOf(is.boolean)); // returns { foo: true }\nis([], is.objectOf(is.boolean)); // throws instanceof is.AssertionError\nis(null, is.objectOf(is.boolean)); // throws instanceof is.AssertionError\nis({ foo: 42 }, is.objectOf(is.boolean)); // throws instanceof is.AssertionError\n```\n\n### `is.shape({ [key: string]: assertion })`\n\n```js\nlet myShape = is.shape({ foo: is.boolean });\n\nis({ foo: true }, myShape); // returns { foo: true\nis({ foo: true, bar: false }, myShape); // returns { foo: true }\nis([], myShape); // throws instanceof is.AssertionError\nis(null, myShape); // throws instanceof is.AssertionError\nis({ foo: 42 }, myShape); // throws instanceof is.AssertionError\n```\n\n### `is.maybe(assertion)`\n\n```js\nis(undefined, is.maybe(is.boolean)); // returns null\nis(null, is.maybe(is.boolean)); // returns null\nis(true, is.maybe(is.boolean)); // returns true\nis(42, is.maybe(is.boolean)); // throws instanceof is.AssertionError\n```\n\n### `is.default(assertion, defaultValue)`\n\n```js\nis(undefined, is.default(is.number, 42)); // returns 42\nis(null, is.default(is.number, 42)); // returns 42\nis(3.14, is.default(is.number, 42)); // returns 3.14\nis(\"hi\", is.default(is.number, 42)); // throws instanceof is.AssertionError\n```\n\n### `is.either(assertionA, assertionB)`\n\n```js\nis(true, is.either(is.boolean, is.string)); // returns true\nis(\"hi\", is.either(is.boolean, is.string)); // returns \"hi\"\nis(42, is.either(is.boolean, is.string)); // throws instanceof is.AssertionError\n```\n\n### `is.AssertionError`\n\n```js\ntry {\n  is(true, is.number);\n} catch (err) {\n  if (err instanceof is.AssertionError) {\n    // an assertion error\n  } else {\n    // some other unexpected error\n  }\n}\n```\n\n### `is.literal(stringLiteral)`\n\n```js\nis('a', is.literal('a')) // returns 'a'\nis(42, is.literal('a')) // throws instanceof is.AssertionError\n```\n\n**With strict typing:**\n\n```js\nlet literalAssetion = is.literal<'a'>('a');\n// or if syntax above doesn't work due to JSX, Prettier, ESLint etc\nimport { type Assertion } from 'sarcastic';\nlet literalAssetion: Assertion<'a'> = is.literal('a');\n\nis('a', literalAssetion) // returns 'a'\nis(42, is.literal<'a'>('a')) // throws instanceof is.AssertionError\n```\n\n### `is.literals(arrayOfStringLiterals)`\n\n```js\nlet literalsAssertion = is.literals([\n  'a', 'b', 'c'\n]);\nis('a', literalsAssertion) // returns 'a'\nis('b', literalsAssertion) // returns 'b'\nis('c', literalsAssertion) // returns 'c'\nis(42, literalsAssertion) // throws instanceof is.AssertionError\n```\n\n**With strict typing:**\n\n```js\nlet literalsAssertion = is.literals<'a'|'b'|'c'>([\n  'a', 'b', 'c'\n]);\n// or if syntax above doesn't work due to JSX, Prettier, ESLint etc\nimport { type Assertion } from 'sarcastic';\nlet literalsAssertion: Assertion<'a'|'b'|'c'> = is.literals<'a'|'b'|'c'>([\n  'a', 'b', 'c'\n]);\nis('a', literalsAssertion) // returns 'a'\nis('b', literalsAssertion) // returns 'b'\nis('c', literalsAssertion) // returns 'c'\nis(42, literalsAssertion) // throws instanceof is.AssertionError\n```\n","readmeFilename":"README.md"}