{"_id":"option-resolver.js","_rev":"4-4f10a982cbdfa6e7895a9e3e9f3ac99f","name":"option-resolver.js","dist-tags":{"latest":"1.1.0"},"versions":{"0.1.0":{"name":"option-resolver.js","version":"0.1.0","description":"Simple Javascript Option Resolver","keywords":["option","resolver","config","configuration"],"author":{"name":"Thomas Jarrand","email":"thomas.jarrand@gmail.com","url":"https://thomas.jarrand.fr"},"license":"MIT","homepage":"https://github.com/Tom32i/option-resolver.js","scripts":{"watch":"webpack --watch --mode=development","build":"webpack --mode=production","test":"mocha","lint":"eslint src/* --ext .js,.json --fix"},"main":"option-resolver.js","devDependencies":{"@babel/core":"^7.10.5","@babel/preset-env":"^7.10.4","babel-loader":"^8.1.0","eslint":"^5.16.0","mocha":"^8.0.1","webpack":"^4.43.0","webpack-cli":"^3.3.12"},"gitHead":"4f1100d0061f509388c04d6b58b947e531255a50","_id":"option-resolver.js@0.1.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-AH/L0DCiuVrGnYmmwVxLywlCrdTYuqjzBjlzLVhTKWmYrPmpWnwCbZ548OcwSZ80VKyeSJt0/hzh5vM9BpWOzQ==","shasum":"1403fb183deda96be8cb3f168e5a31c4bc162102","tarball":"https://registry.npmjs.org/option-resolver.js/-/option-resolver.js-0.1.0.tgz","fileCount":5,"unpackedSize":11050,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFo97CRA9TVsSAnZWagAA4uUP/Av533E8k2X9juraX24m\nVt4wSp0RRluP7LaBOeJGtpfBSWmiMBvzkRnq/UlMADMM1vEkr1f3n3+rwk/+\nXNwfgLlGYUp8ewaYdLdHCuPwf+5YaIGZxioTTrZTItAOtJ1JrcVEkUgydC3S\nO4MXWs3HHe4S0aEOQTcxrufZrZVoHluNPK5ZnMLXipCiSPlkZWKPG7ENSg/U\njq+SFB2vxIHg4OWGcFFHFiQLB8OU5DQ8K6+M6nL/pe6UzRVo3Y9cQ/Vivr0B\nK+FnVk2eH+h2jbLDwbO7N7iXPouvKZTv9E4BgtlZYhFMPkzeYUVXf6zxDTK0\n3jAurQPLc+7h9kJShJYOGCiSBv8LEkYv8IEp2JmQ5WR6GgllX6uFJjU+C0Af\niQDUjIH/EqZ3Gmv6454JUDRD8wnZCCIUmXd3WjDaW7Or6LRpYgpN4NNu+f6Y\nz3iJCEk3gCEJeViAjkCesMUnJQU7FiY310D2vvoGFZgzIIp5odPDwlxJNiga\n3AjzHWmq1MZzWtO0CJjRgJg/MmaaIZsmXtwy561MK2eNiMTuNJFGnkw2FpxN\nQc+QO51+QdwMNrZKUuYZr5x5J6TehiRZHBm8w00K0pRRXQlc69UKYw/YVxOL\n0VMgt7mrfaol1eCWg9TnF1n+FCXyjv2M2L1gqtoT3cEeOJM6e3XEjTxlMvpb\nXzVk\r\n=0tAN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID0z4npi8bqP6ze+6ykesjnPf2KGNKlbbYi04BkhHmxMAiABeL3DJmb+Ij63GxoeVrTm/dCkyQEhl7vodLjI3zDQTA=="}]},"maintainers":[{"name":"tom32i","email":"thomas.jarrand@gmail.com"}],"_npmUser":{"name":"tom32i","email":"thomas.jarrand@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/option-resolver.js_0.1.0_1595314042768_0.6988303048664677"},"_hasShrinkwrap":false},"0.1.1":{"name":"option-resolver.js","version":"0.1.1","description":"Simple Javascript Option Resolver","keywords":["option","resolver","config","configuration"],"author":{"name":"Thomas Jarrand","email":"thomas.jarrand@gmail.com","url":"https://thomas.jarrand.fr"},"license":"MIT","homepage":"https://github.com/Tom32i/option-resolver.js","scripts":{"watch":"webpack --watch --mode=development","build":"webpack --mode=production","test":"mocha","lint":"eslint src/* --ext .js,.json --fix"},"main":"option-resolver.js","devDependencies":{"@babel/core":"^7.11.4","@babel/preset-env":"^7.11.0","babel-loader":"^8.1.0","eslint":"^5.16.0","mocha":"^8.1.2","webpack":"^4.44.1","webpack-cli":"^3.3.12"},"gitHead":"b2230d0502ce8da588cdc7e1eebda7a71b1c3b3f","_id":"option-resolver.js@0.1.1","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-p9wIVX2gUAwYPlSHf3k12uov/8y7j4ly4S3bmDa8btCuN3BnA/Nt+lkPKiDy/7iJQvq5B+NnssR3Z+7GuTc4wg==","shasum":"0d30aed33f8df68aade5ce5ff44a943089f11ab8","tarball":"https://registry.npmjs.org/option-resolver.js/-/option-resolver.js-0.1.1.tgz","fileCount":5,"unpackedSize":11310,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR6BOCRA9TVsSAnZWagAA68MP/2Mkh9FL/jbciDLv6n4N\nsivC7pBccd5I6W/+7ZYXveW6/chfNkAFmGL2fxAd4k+ocMllifB9tPrnn18/\nUxS2roIpZ7Yj0PRrMFbuxlK/4A4cPOu4mbPpIoSCG1xiV17OW+kM2VCbps08\nJ6NRXjw68wBMSaFz5JFSddEBisRQWBp8zaFGMaELx3Z+7jqYJbpjvNXtIRwc\nCxz53L33/mTjXSn1BJB8a1hWiEI2u47Fvt8Avz9Ba+X/eb6AzAvo78MMkD3J\nGi5iPoaOehTTYlLOhFIj6P5tLRa9PKkWOffElqrJeI81QzoTaRTXgOrBSMCV\nn1Rbe2oRUHPXAn1VJJPQvNMHA+MMB/Gcppgc2uruP3AfLt3hcPCJjs//aop1\nE0bzmy6lfbV5SVqLRwVAjaI2IoeQt7oNZW75Xx6MdlWSR++3Mor9PDgYpAiF\nuhcUrLAc9rQS3znia7TlUiddw/Q1Lsg14kRgF6fjJl/NIxFiKWnyFYnR9/Kf\njIM0S5t3sho+UceGei65Pd8yniYoM999cSw1mHkXRPiqaQHChCTnzUG9j8NA\neJy/aRxfjj2O3J9z9wWZ3nuTghOiEmZApbWX0DI1SrxSYWVKIg6TKIS4QYup\nw9ISJ2Vm4sPwwoRvVz3nypg3mz+JOKDZp6bdDtnyu5ScZMoZJ/1WJeGgh825\ncjnV\r\n=u7eV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHRfKu8C6RsJK306+m2zoyPZaamA1okL0do7q6W7LhNdAiEAt1Z6MSjftG5nCQ9arOvSrAW4oucoY2RFhqL+vZDjfL8="}]},"maintainers":[{"name":"tom32i","email":"thomas.jarrand@gmail.com"}],"_npmUser":{"name":"tom32i","email":"thomas.jarrand@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/option-resolver.js_0.1.1_1598529614023_0.3849191473645277"},"_hasShrinkwrap":false},"1.0.0":{"name":"option-resolver.js","version":"1.0.0","description":"Simple Javascript Option Resolver","keywords":["option","resolver","config","configuration"],"author":{"name":"Thomas Jarrand","email":"thomas.jarrand@gmail.com","url":"https://thomas.jarrand.fr"},"license":"MIT","homepage":"https://github.com/Tom32i/option-resolver.js","scripts":{"watch":"webpack --watch --mode=development","build":"webpack --mode=production","test":"mocha","lint":"eslint src/* --ext .js,.json --fix"},"main":"option-resolver.js","devDependencies":{"@babel/core":"^7.14.0","@babel/preset-env":"^7.14.0","babel-loader":"^8.2.2","eslint":"^7.26.0","mocha":"^8.4.0","webpack":"^5.36.0","webpack-cli":"^4.6.0"},"gitHead":"ca46babab9e0179aab8a9f0d4bfadb0081593f31","_id":"option-resolver.js@1.0.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-HDb5ynQn8UFRCnUdyTALLvdmjbIpgwmy46NxZP0bsZ5VK1NIc6y2RAkahKRKJE+jKesu3YnO3CqlN21zV/psUQ==","shasum":"510538ac2403d73d52e37334b6e22b39fc77f3a7","tarball":"https://registry.npmjs.org/option-resolver.js/-/option-resolver.js-1.0.0.tgz","fileCount":5,"unpackedSize":10516,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgml7dCRA9TVsSAnZWagAAXF4P/0hHIfS2yDYjw1/mdxgk\nLAO6BI+Wbn4MVTVOzN4kL3o/ilERSrVzZCu+dcY/oXYjftVnF3iTApne4w6c\ntM49r+pSt07u3LB8MUxvMP4hLZLhtRCoqkABCRC3L539PGGx+dSva6Jma4Ck\nP7guaH70Oom6szSBgtGhXiuVgNfg1YWBenlZKa4qT/P5bOHYb47SXTXKYG0F\ncAdeDI0Ym4JU57oHAi04s+jO1TZXl5dZtCvE8A1yqh4F/G/zemyOV2ssH63T\n4C3wGBAY3pMIUt7oaNl+MGXXid00W0spa8we17AhuhP9zXOxTYJd+W605i7u\nkQjId/oMzHSkxeeiySiJHKU8MlrK36HRaJRssyqhJH0n59tuuDdPkMKLVeKn\nmFfTOe9Gi74pdocZptuu+Zhx4kzwOfIB/HVM85Bw0B1bQbuz++mmlfq/+doa\nH7RhQ2h/8Gsy9hst2qz4DmutVQIuNjWYesQalbmGxnjPKTapIbumkXmQjA0B\nVzeyO63pWX/SESbdaPFddW7AYvTTlIbPdncQFcxuDaqVcaCXiV1FeWZlS+fw\nzyimkR3Rw+J9UrzZWxzEpoRqN3aHOwDrzFCMuXVHBJTdUlJng6/0YvYBRXwv\neaMexYJHVWr4PYx9hUA9oeXdfUPnAqS1lsjr17n59ouJcbAiJ/xTIvFqdXOF\nIBYv\r\n=70zl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSJTwy+heML5v+AuX5Wf3lg/Vk7+z2HEsSlkO5SyfTIwIhAPkSeJgNRzusU4rd61u2X8F4Cc5moENYF/IX5UmuXNlD"}]},"_npmUser":{"name":"tom32i","email":"thomas.jarrand@gmail.com"},"directories":{},"maintainers":[{"name":"tom32i","email":"thomas.jarrand@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/option-resolver.js_1.0.0_1620729564514_0.12479947093226351"},"_hasShrinkwrap":false},"1.1.0":{"name":"option-resolver.js","version":"1.1.0","description":"Simple Javascript Option Resolver","keywords":["option","resolver","config","configuration"],"author":{"name":"Thomas Jarrand","email":"thomas.jarrand@gmail.com","url":"https://thomas.jarrand.fr"},"license":"MIT","homepage":"https://github.com/Tom32i/option-resolver.js","scripts":{"start":"webpack serve --mode=development","build":"webpack --mode=production","test":"mocha","lint":"eslint src/* --ext .js,.json --fix"},"main":"option-resolver.js","devDependencies":{"@babel/core":"^7.14","@babel/preset-env":"^7.14","babel-loader":"^8.2","eslint":"^7.26","mocha":"^8.4","webpack":"^5.36","webpack-cli":"^4.6","webpack-dev-server":"^4.11"},"gitHead":"b1365566d5bb1de18c26fbc381dcf32f5eeb9375","_id":"option-resolver.js@1.1.0","_nodeVersion":"19.4.0","_npmVersion":"9.2.0","dist":{"integrity":"sha512-gckuegIqAloPysPLK/mN3S88IcKfvPbSZntfpyqThbCKoPDmcC5kVM/2qpXglhrpab7GdWdd63XrttzTSMHUiw==","shasum":"d24e8890b9d049056e9cc33b5232ecd4b6e4f0fb","tarball":"https://registry.npmjs.org/option-resolver.js/-/option-resolver.js-1.1.0.tgz","fileCount":5,"unpackedSize":13952,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH2790G/o4qlss1m0AXoF61hy+gG6V+PPxjfrzr7o5BFAiA8T31V6XAKduaMvPHkWHkG96VtHRelHJp2Pr9mrbCPgw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj082uACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpKjw/+NnzsP9TF/X6YU3PVW6I7AgEJm6YpLkorT2czoTDwcL3qw++o\r\nW39stzByLRlIIswsf2e8n6txcLza30HXyc2BNdV2B5VY3fSuu+diMRYRvTZV\r\n9+7KBHeAHBtmbKEapSem5yoyTj3n4n5Hmd94+Ef/dvBjo5PUFeZJpmwrRSLA\r\newXSIjkExs9MCtPHEfrtYzYbmAZNZ69YbotIqDY6mC2YqmzKMJRdd6Q658q0\r\nTvJzEOeiM0BH+ZtR8/RcnOFWv26inKl4YWYPKqjZ41fuKs6TzwsvkY6Ik5lt\r\n2YyNLfNbTpuSRs/afzur9qLxPYzLR++LxD+eRF26BJDw0VrNTK1e5Wkrnk8j\r\n6jqOuK6Z/YrF+HmeT5aVrKX54vjnBh/HPsmayVgkCMtOgx1lju5J4awxAJHL\r\ntS+nkoS0KFrT8gw1kcbY7fOBjNzJJ8+A2OvjQGwqj/4i07fCbWxyNEXFl9E7\r\nmLcKA/N8zw5M43VR2YeNd0RfjNGMojvzeOvH/dPv52UREL9VXIosdH8G0ciZ\r\nGnocnF/l2YwswXcwwcyI3wi5AouFoo9i2yw71rWAIFNlTk3c7wbyYQpS4i5b\r\n0oE8RDD63tN9gimlwg8sdjxCILqC9Xt+ta7+Pq9+gk77I8PiSbf/4OI2Fr+X\r\nOJDPf2i3BjZl0F5NvzNsgjiLI8uTNtbh23Y=\r\n=psb2\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"tom32i","email":"thomas.jarrand@gmail.com"},"directories":{},"maintainers":[{"name":"tom32i","email":"thomas.jarrand@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/option-resolver.js_1.1.0_1674825134270_0.9824193710641613"},"_hasShrinkwrap":false}},"time":{"created":"2020-07-21T06:47:22.725Z","0.1.0":"2020-07-21T06:47:22.981Z","modified":"2023-01-27T13:12:14.570Z","0.1.1":"2020-08-27T12:00:14.116Z","1.0.0":"2021-05-11T10:39:24.724Z","1.1.0":"2023-01-27T13:12:14.435Z"},"maintainers":[{"name":"tom32i","email":"thomas.jarrand@gmail.com"}],"description":"Simple Javascript Option Resolver","homepage":"https://github.com/Tom32i/option-resolver.js","keywords":["option","resolver","config","configuration"],"author":{"name":"Thomas Jarrand","email":"thomas.jarrand@gmail.com","url":"https://thomas.jarrand.fr"},"license":"MIT","readme":"option-resolver.js\n================\n\nSimple Javascript Option Resolver\n\n## Install:\n\n    npm install option-resolver.js\n\n### Import\n\nHTML:\n\n```html\n<script src=\"option-resolver.js\"></script>\n```\n\nES6:\n\n```javascript\nimport OptionResolver from 'option-resolver.js';\n```\n\nNode:\n\n```javascript\nconst OptionResolver = require('option-resolver.js');\n```\n\n## Usage:\n\nDefine the format of your configuration:\n\n```javascript\nconst definition = new OptionResolver()\n    .setTypes({\n        color: 'string',\n        length: 'number',\n        debug: 'boolean',\n    })\n    .setRequired(['color'])\n    .setDefaults({\n        debug: false,\n    });\n```\n\nResolve a config object:\n\n```javascript\nconst options = definition.resolve({\n    color: 'red',\n});\n```\n\nThis return the following object:\n\n```javascript\n{\n    color: 'red',\n    debug: false,\n}\n```\n\n## Features\n\n### Default values\n\nDefine a default value for a property:\n\n```javascript\n// This will return `{ foo: 'bar' }`:\nnew OptionResolver()\n    .setDefault({ foo: 'bar' })\n    .resolve({});\n```\n\n### Required properties\n\nYou can mark a property as required, to ensure it's defined:\n\n```javascript\n// This will return `{ foo: 42 }`:\nnew OptionResolver()\n    .setRequired(['foo'])\n    .resolve({ foo: 42 });\n```\n\nIf the required property is not provided, the OptionResolver will throw an exception:\n\n```javascript\n// This will throw an Error: `Option \"foo\" is required.`:\nnew OptionResolver()\n    .setRequired(['foo'])\n    .resolve({});\n```\n\n### Optional properties\n\nBy default, the option resolver throws an error if provided with a property that was not declared with `setRequired`, `setDefault`, `setTypes` or `setValidators`:\n\n```javascript\n// This will throw an Error: `Unkown option \"foo\".`:\nnew OptionResolver().resolve({ foo: true });\n```\n\nTo allow such a property, you must define it as optional:\n\n```javascript\n// This will return `{ foo: true }`:\nnew OptionResolver()\n    .setOptional(['foo'])\n    .resolve({ foo: true });\n```\n\n_Note:_ Alternatively, you can allow any extra property with `allowExtra()`:\n\n```javascript\n// This will return `{ foo: true }`:\nnew OptionResolver()\n    .allowExtra()\n    .resolve({ foo: true});\n```\n\n### Property types\n\nValidates the [type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#primitive_values) of a property:\n\n```javascript\n// This will return `{ foo: 42 }`:\nnew OptionResolver()\n    .setTypes({ foo: 'number' })\n    .resolve({ foo: 42 });\n```\n\nIf the property type doesn't match the expected type, the OptionResolver will throw an error:\n```javascript\n// This will throw an Error: `Wrong value for option \"foo\": expected type \"number\", got \"string\".`:\nnew OptionResolver()\n    .setTypes({ foo: 'number' })\n    .resolve({ foo: 'test' });\n```\n\n### Property validator\n\nYou can apply a validator function to constrain a value with a custom callback:\n\n```javascript\nconst resolver = new OptionResolver().setValidators({\n    // Constain \"rate\" property within 0 and 100:\n    rate: value =>  Math.max(0, Math.min(100, value)),\n});\n\n// This will return `{ rate: 87 }`:\nresolver.resolve({ rate: 87 });\n\n// This will return `{ rate: 100 }`:\nresolver.resolve({ rate: 124 });\n```\n\n_Note:_ The validator will not be executed if the property is not set.\n\n```javascript\n// This will return `{}`:\nnew OptionResolver()\n    .setValidators({ name: value => value.trim() })\n    .resolve({});\n```\n","readmeFilename":"README.md"}