{"_id":"@accup/satis","_rev":"3-79fdc37115c6217092be7b3dd2982514","name":"@accup/satis","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@accup/satis","version":"0.0.1","type":"module","license":"MIT","author":{"name":"Accup"},"description":"Optional value utility in JavaScript/TypeScript","main":"./dist/satis.cjs","module":"./dist/satis.js","types":"./dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/satis.js","require":"./dist/satis.cjs"}},"repository":{"type":"git","url":"git+https://github.com/accup/ts-utils.git"},"bugs":{"url":"https://github.com/accup/ts-utils/issues"},"homepage":"https://github.com/accup/ts-utils/tree/main/packages/satis#readme","scripts":{"build":"vite build && tsc"},"gitHead":"a2fa6669a66f6c5d7d3366b9354a02f1fd7fe7a3","_id":"@accup/satis@0.0.1","_nodeVersion":"18.12.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-rK4Wf+OsOmVb26DCjo6FGF6aYN6NgfghlaLjLB42s6rlPJYI6oOdfXCgsC/EZ83U1i46hYfORwAA1FNCrNQ9Tw==","shasum":"4f30736ff44a326de5cfed7721fa33d04f89bf2c","tarball":"https://registry.npmjs.org/@accup/satis/-/satis-0.0.1.tgz","fileCount":7,"unpackedSize":6439,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7JwgPCNwSMgMkhfieJJe1tlfLFBvhnUokbY/zj48NhwIgF4mQFnndJp1HsrinsNX0zGL6aXCIe0DGaMttkOTc1VA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZrFgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr+GhAAmr8G5BjXB0k1ze/3S8OPRtSuglmr5mdAzNajCxjMy9pl/QfE\r\njqslK0buwGmRDB3PHRuCku2wHQnWRol+8slyoYfb4AtU0wtFa1rnHxy5BSYY\r\nWKPGo0b4wbyYAwheWo+pZI0e76kQvKXI0i4qUwo4vULvVVOWFm82IwBrZiT+\r\nM42qIl7Km89IAL5eEmHOkfRGswr7tWo9pplOEBhqH34k1A9zIbA9m6JDpwhT\r\n44A9lNoYlcVR6Bsu4uUeCaeHWnFve34cb+DG4ennRybT03EdR9YTMfb4b3FF\r\n2+m6jvphoyhyifv1Cwcf4Tva+gJYZb73TdKM8xni9NAVGgQiBMPimWb0AWX+\r\nxxzx2xAVyMtrHg4LUXSqtKBxzAfDxrUbXsd1rTkCTOAIllvDK/341ohcMHqZ\r\n5v5rsfHQvhs9xa46grXxA/dVAXiJXNzutoAZWI9ujxhE/GaCogXUbJQ8J1Tg\r\nRSdbaPwqL4KcKmxWkI9KxPHU/OLFR+WZzVYVAgCziRn1jopPXp4eVX5s87T1\r\nhmIYWHGqImvSVcNs9jPlP+3RU3zoQI4xxw7ZZyAIUYIybsKrgowGFHkFHE3V\r\np7Ta2WulB/Y4hVlS7cwYU8hT78Tjad0oCQzw2sprZ6vVCQ/WJAKB/68IgZm3\r\n7LDSwfv8W5pu9T1DtJL9/jkeq8nk1YeB7og=\r\n=qTCr\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"accup","email":"dev.accup@gmail.com"},"directories":{},"maintainers":[{"name":"accup","email":"dev.accup@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/satis_0.0.1_1667674464048_0.6942409081529446"},"_hasShrinkwrap":false},"0.0.2":{"name":"@accup/satis","version":"0.0.2","type":"module","license":"MIT","author":{"name":"Accup"},"description":"Optional value utility in JavaScript/TypeScript","main":"./dist/satis.cjs","module":"./dist/satis.js","types":"./dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/satis.js","require":"./dist/satis.cjs"}},"repository":{"type":"git","url":"git+https://github.com/accup/ts-utils.git"},"bugs":{"url":"https://github.com/accup/ts-utils/issues"},"homepage":"https://github.com/accup/ts-utils/tree/main/packages/satis#readme","scripts":{"build":"vite build && tsc"},"gitHead":"a3264cc65ea710f260238026966ab23b0e02fe9c","_id":"@accup/satis@0.0.2","_nodeVersion":"18.12.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-6bxrgQB6XFqyunSeL5iOAU7mRTvRk4nTk+AQdQzEvib4UrytKWeLIdcQZ2u4jFg/WImyZZhKmqubE1HjsiQDig==","shasum":"ba403eb4539d30fae39ef9fd0c134b90cf7379fc","tarball":"https://registry.npmjs.org/@accup/satis/-/satis-0.0.2.tgz","fileCount":7,"unpackedSize":6509,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC74y3Egr1pUoGmWB3Jba3lsyIpfIHBet5XTw+3vjGmHAiEArgl5FIqZRV9CvoS3UNEnL0ZAajWYSpLO/EVQ2qhoNSU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZsGyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmok2w/+JmciWdUYKZSDJogeuOI4b7tauI6vuZE5YM4OApvfQZbO9b+z\r\nrXHvlR2iGA9BaSkyG5xu0QeX0WDlVq54CZxvVyHgn3dFGuHZZ9ps2Cj+UirE\r\n55ZhjpLlhabWZcGfA9K/TnmXx5zJK2zYJZQ1L4aitvHyduTcGz59oEsuPtqx\r\ngOIHtIYlM4aYWyVlOKIrPuILih7ewJ438blQfKkPOpKGaW43ffS1RU0Y/QoX\r\nVRpsF3YVQ+cqycGQM103TXJm2cU6VsuLuv2X6dxCfLbe+8i521HL8Dif7W7Q\r\nzMzX1fAN7kEoaaMJkdfJjgkIgw3/JxdAkDtXOSDlFR47HsyDU7WkbmiY/L6/\r\nq9D9cOR56FBUsmRjDtk/56D3qyxexbL1Pub2ElE5sFn0zdVqG3ErGeBzNsmQ\r\nC9Y5Wl1DkjLmPvaBOixYgHS09nSyBcTf2VxrJSLar7Q7vsgXt/jlwGPwDY5U\r\nKRnYAlsWoj1/1HgzuRJpyVRNcE9pM+jBEoaHHGjiIZVJTSKihMh3ioNTO26E\r\n8l2yDIC6+J6BeC4mFA+/d0eE5pIJ2tOdMTTjP2+ovvP9FM/wsBFyR++coKma\r\ngdemkNz00YlxraH848Hlo3QM3kCmZ6t6ZeEo8mcLG2q8kvm3prxjPTAJMRPY\r\n82erL2caxZvxU9jRebvwxNcDLVBGHSdHQdk=\r\n=0lbm\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"accup","email":"dev.accup@gmail.com"},"directories":{},"maintainers":[{"name":"accup","email":"dev.accup@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/satis_0.0.2_1667678642068_0.774055694785966"},"_hasShrinkwrap":false}},"time":{"created":"2022-11-05T18:45:25.577Z","0.0.0":"2022-11-05T18:45:25.824Z","modified":"2022-11-05T20:04:02.349Z","0.0.1":"2022-11-05T18:54:24.249Z","0.0.2":"2022-11-05T20:04:02.262Z"},"maintainers":[{"name":"accup","email":"dev.accup@gmail.com"}],"description":"Optional value utility in JavaScript/TypeScript","homepage":"https://github.com/accup/ts-utils/tree/main/packages/satis#readme","repository":{"type":"git","url":"git+https://github.com/accup/ts-utils.git"},"author":{"name":"Accup"},"bugs":{"url":"https://github.com/accup/ts-utils/issues"},"license":"MIT","readme":"# Optional value utility in JavaScript/TypeScript\n\n## Installation\n\n```\nnpm install @accup/satis\n```\n\n## Usage in TypeScript (or in JavaScript except types)\n\n```ts\nimport { opt, opts, optEach } from \"@accup/satis\";\n\nconst fillOptions = opts({\n  foo: opt(\"\"),\n  bar: optEach(opt<string | number>(0)),\n});\n\nfillOptions();\n// => { foo: \"\", bar: [] }\n\nfillOptions(undefined);\n// => { foo: \"\", bar: [] }\n\nfillOptions({ foo: \"foo\" });\n// => { foo: \"foo\", bar: [] }\n\nfillOptions({ bar: [undefined, undefined, \"bar\", undefined] });\n// => { foo: \"foo\", bar: [0, 0, \"bar\", 0] }\n```\n\n## Custom Function\n\n```ts\nconst fillOptions = opts({\n  foo: (partial: string | undefined) => partial || null,\n});\n\nfillOptions({ foo: \"foo\" });\n// => { foo: \"foo\" }\n\nfillOptions({ foo: \"\" });\n// => { foo: null }\n```\n\n> **Note**\n> 'opts' only accepts filling functions with a parameter containing 'undefined' type for all descriptor properties.\n\n## Partial and Filled Value Types\n\n```ts\nimport { opt, opts, type PartialValue, type FilledValue } from \"@accup/satis\";\n\nconst fillOptions = opts({\n  foo: opt(\"\"),\n  bar: opt(0),\n});\n\ntype PartialOptions = PartialValue<typeof fillOptions>;\ntype FilledOptions = FilledValue<typeof fillOptions>;\n\nfunction doSomethingWithOptions(options?: PartialOptions) {\n  const opts: FilledOptions = fillOptions(options);\n\n  // ...\n}\n\ndoSomethingWithOptions();\ndoSomethingWithOptions(undefined);\ndoSomethingWithOptions({ foo: \"foo\" });\ndoSomethingWithOptions({ foo: \"foo\", bar: 2 });\n```\n\n## Early Type Checking (not optimized)\n\n```ts\nimport { opt, opts, filling } from \"@accup/satis\";\n\ninterface Options {\n  foo: string;\n  bar: number;\n}\n\n// Same result as without wrapping the 'filling' function\nconst fillOptions1 = filling<Options>()(\n  opts({\n    foo: opt(\"\"),\n    bar: opt(0),\n  })\n);\n\n// Insufficient definition causes a TypeScript compiler error\nconst fillOptions2 = filling<Options>()(\n  opts({\n    foo: opt(\"\"),\n    bar: opt(\"0\"), // Type 'string' is not assignable to type 'number'.\n  })\n);\n```\n","readmeFilename":"README.md"}