{"_id":"@alanqthomas/option","_rev":"1-59fa6b9ece8423bc8beb73dda4b739b0","name":"@alanqthomas/option","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@alanqthomas/option","version":"1.0.0","description":"Option type for Typescript","main":"lib/index.js","types":"lib/index.d.ts","repository":{"type":"git","url":"git+https://github.com/alanqthomas/option.git"},"author":{"name":"alanqthomas"},"license":"MIT","scripts":{"test":"mocha --opts mocha.opts --watch","testOnce":"mocha --opts mocha.opts","build":"tsc","docs":"typedoc --out ./docs ./src"},"devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.5","chai":"^4.2.0","mocha":"^5.2.0","ts-node":"^8.0.2","typedoc":"^0.14.2","typescript":"^3.3.1"},"dependencies":{},"gitHead":"d96b85f89dafeda312b0ad2c713cdcac36c171e2","bugs":{"url":"https://github.com/alanqthomas/option/issues"},"homepage":"https://github.com/alanqthomas/option#readme","_id":"@alanqthomas/option@1.0.0","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"alanqthomas","email":"mail@alanqthomas.io"},"dist":{"integrity":"sha512-xLMSBM8gdNGN2e+MbUq1CBlxiyQB/wXMPnlhejmHnfwrO8qZtFgZtdWWKYGDpmh4+wMMnp1867Elu5RExwi7cA==","shasum":"af037df502ce8039cb029f6aa9e2a88a664a9677","tarball":"https://registry.npmjs.org/@alanqthomas/option/-/option-1.0.0.tgz","fileCount":37,"unpackedSize":760962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcV2SoCRA9TVsSAnZWagAArQEP/3BXqj65LxJW3vT52PxL\nf4AVw0bHh/JRNhRDtp4IdL9K/7lyh7KYQvcpSDKNo/HdeJ975Jw5KXNTc+Lp\ne2+YT8D3q2P6EH9jZXq0eMnb85s2sD6eoVkiao8aCPYPtlke9Cn/KbJTF5tF\n9TytlNOz36T/jR23upBVW98eqxlxEanm8ECCO8lBA0pdINpFIoct0fT+nC5E\n/QneEs823HxhX7Qe+IadZ/8gjUixt94lo3TPplN8aKw8qE7Pmy4HJIWxUtn+\n3LDTGRWEDEjPx0sP0AIkrBoaMU+6k8nEpsdkJy6BX+YMBnTSPU8BjsSCkvpu\nba/oc7U3ysq3sqaMgGbBYv7tcvwvMRviJ6E+dtcTB7Irabtt4R7Hmi/YYLBC\ndaB4TyxnQg/48It0qb3gp2wxRKd8ExPyCSnuCM1m1OOaCYb6CaOM7DvKdn30\nVjQwS+EGrMHCX7setWaIECErH2xYzK0DWGYJB8sPl2chHScTxhuCpwytyWe5\nV///nvxHCiJvHt2hiXTqrbSP4urcxZmMX05KOqv8oXbjduzWMgFtHyOwaFKx\ntu6ymg6DedONKg+/y/YBXX7xP/tr0lw1i5rKJl6KQtO7WH6egwUKekRJd74x\no4wMVkpRFk334BX+7YfmLGY6KuBk6WmB8jFt2IdV547mGtZzHWTflFtK038P\njDI8\r\n=ALGi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB/CBTqk+HlJQI/wOV975s3ksZl0pE0tfIMTuUIpkaMTAiEAw/eD1o1A9O4s/SSbvXG67XuG/A5WGORZQl6PM+Lqagg="}]},"maintainers":[{"name":"alanqthomas","email":"mail@alanqthomas.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/option_1.0.0_1549231271687_0.5525833278742303"},"_hasShrinkwrap":false}},"time":{"created":"2019-02-03T22:01:11.505Z","1.0.0":"2019-02-03T22:01:11.852Z","modified":"2022-04-04T12:33:16.295Z"},"maintainers":[{"name":"alanqthomas","email":"mail@alanqthomas.io"}],"description":"Option type for Typescript","homepage":"https://github.com/alanqthomas/option#readme","repository":{"type":"git","url":"git+https://github.com/alanqthomas/option.git"},"author":{"name":"alanqthomas"},"bugs":{"url":"https://github.com/alanqthomas/option/issues"},"license":"MIT","readme":"# Option\n_Option type for Typescript based on the [Scala Option type](https://github.com/scala/scala/blob/2.13.x/src/library/scala/Option.scala)_\n\nIf you're already familliar with type `Option` type, this should work more or less like you would expect it to.\n\nIssues and PRs are welcome if you find any bugs in the code.\n\n## Install\n`yarn add @alanqthomas/option`\n\n`npm install @alanqthomas/option`\n\n## Development\nTest with watch:\n`yarn test`\n\nTest once:\n`yarn testOnce`\n\nBuild Typescript:\n`yarn build`\n\nGenerate Docs:\n`yarn docs`\n\n## Examples\nSee the [TypeDoc documentation](https://alanqthomas.io/option) for more specific type info.\n\n### Import\n`import { Option, Some, None } from '@alanqthomas/option'`\n\n### Constructors\nConvenience methods to create new options without using `new`. This also means that the _real_ classes behind them are suffixed with an `_`, e.g. `Option_`.\n\n```\nconst someVal = Option(42)\n              = Some(42)\nconst noneVal = None\n              = Option(null)\n              = Option(undefined)\n              = Option.empty<WhateverType>()\n```\n`Option.empty` is useful is you need a `None` that conforms to a certain type.\n\n---\nLet's use these values for our examples (`A` will be `number`):\n```\n// Option<Int>\nconst some = Some(42)\nconst none = Option.empty<number>()\n```\n\n### `isEmpty(): boolean`\n```\nsome.isEmpty() // false\nnone.isEmpty() // true\n```\n\n### `isDefined(): boolean`\n```\nsome.isDefined() // true\nnone.isDefined() // false\n```\n\n### `nonEmpty(): boolean` (alias for `isDefined`)\n```\nsome.isDefined() // true\nnone.isDefined() // false\n```\n\n### `get(): A`\n```\nsome.get() // 42\nnone.get() // throws ReferenceError!!\n```\n\n### `getOrElse(e: A): Option<A>`\n```\nsome.getOrElse(0) // 42\nnone.getOrElse(0) // 0\n```\n\n### `orElse(alt: Option<A>): Option<A>`\n```\nsome.orElse(Some(0)) // Some(42)\nnone.orElse(Some(0)) // Some(0)\n```\n\n### `map<B>(f: (a: A) => B): Option<B>`\n```\nsome.map(x => x + 2) // Some(44)\nnone.map(x => x + 2) // None\n```\n\n### `flatMap<B extends NonEmpty>(f: (a: A) => Option<B>): Option<B>`\n```\nsome.flatMap(x => Some(x + 2)) // Some(44)\nnone.flatMap(x => Some(x + 2)) // None\n```\n\n`NonEmpty` is a type alias for a non-null, non-undefined value\n`type NonEmpty = string | number | boolean | symbol | object`\n\n### `fold<B>(b: B, f: (a: A) => B): B`\n```\nsome.fold(0, x => x + 2) // 44\nnone.fold(0, x => x + 2) // 0\n```\n\n### `filter(p: (a: A) => boolean): Option<A>`\n```\nsome.filter(x => x === 42) // Some(42)\nnone.filter(x => x === 42) // None\n```\n\n### `filterNot(p: (a: A) => boolean): Option<A>`\n```\nsome.filterNot(x => x === 0) // Some(42)\nnone.filterNot(x => x === 0) // None\n```\n\n### `contains(elem: A): boolean`\n```\nsome.contains(42) // true\nnone.contains(42) // false\n```\n\n### `exists(p: (a: A) => boolean): boolean`\n```\nsome.exists(x => x === 42) // true\nnone.exists(x => x === 42) // false\n```\n\n### `forall(p: (a: A) => boolean): boolean`\n```\nsome.forall(x => x === 42) // true\nnone.forall(x => x === 42) // true\n```\n\n### `foreach<B>(f: (a: A) => B): void`\n```\nsome.foreach(x => console.log(x)) // prints 42\nnone.foreach(x => console.log(x)) // doesn't print\n```\n\n### `toArray(): Array<A>`\n```\nsome.toArray() // [42]\nnone.toArray() // []\n```\n\n### `match<B, C>(matches): B | C`\n`matches` is an object of shape:\n```\nmatches: {\n  none: () => C,\n  some: (a: A) => B\n}\n```\nOf course, order doesn't matter in an object, so you can put in the `some` or `none` function in the order you want\n```\nsome.match({\n  some: x => x + 2,\n  none: () => 0\n}) // 44\n\nnone.match({\n  some: x => x + 2,\n  none: () => 0\n}) // 0\n```\n","readmeFilename":"README.md"}