{"_id":"@castlelemongrab/iniedit","_rev":"4-11df3724eca14124616aefcfd7d1a0c8","name":"@castlelemongrab/iniedit","dist-tags":{"latest":"0.0.5-pre1"},"versions":{"0.0.1":{"name":"@castlelemongrab/iniedit","version":"0.0.1","license":"MIT","description":"A simple command-line INI file editing tool based on ini-parser","author":{"name":"Castle Lemongrab, a subsidiary of Baby Britain, Ltd."},"main":"src/ini.js","repository":{"type":"git","url":"git+https://github.com/castlelemongrab/iniedit.git"},"dependencies":{"@castlelemongrab/ioh":"^0.0.4","@castlelemongrab/oath":"^0.0.2","@castlelemongrab/strr":"^0.0.1","@jedmao/ini-parser":"^0.2.4","line-reader":"^0.4.0","yargs":"^15.4.1"},"devDependencies":{"chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-js-factories":"^0.1.5","mocha":"^8.0.1","uuid":"^8.3.0"},"scripts":{"clean":"rm -f ./test/temp/*.ini","test":"./node_modules/mocha/bin/mocha -t 5000 test/unit test/integration"},"black":{"lives":"matter"},"gitHead":"1762fd9fde4336d2eb8169764767859b75c36143","bugs":{"url":"https://github.com/castlelemongrab/iniedit/issues"},"homepage":"https://github.com/castlelemongrab/iniedit#readme","_id":"@castlelemongrab/iniedit@0.0.1","_nodeVersion":"14.2.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-peCG1rsrvbFtuS6VHg2auZzW5em2v15se6Q+VcEQaro3FbkyknFgE/8BIa6qYjQ2T5iBeu5f+2DpTWjgpEZP3Q==","shasum":"0b99a764c522cdda9277b84474128dc53103f6ca","tarball":"https://registry.npmjs.org/@castlelemongrab/iniedit/-/iniedit-0.0.1.tgz","fileCount":22,"unpackedSize":46976,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMwuDCRA9TVsSAnZWagAAUQYP/07a8tpsASZ5tvZC8s9W\n05tzwbrXb/6l484xX/OWbYD6DmFaRfzibJQX5yUFo/a9BOUOH/r4Nz2+O0WM\nVOgGpvxJX8FSvM7dA59pOgmCYf7yUY5eKE7molD5wachAeLRKMOB6znBrlWY\nHuhO66GxlGgeR4IXfINA52DKIOk9viQ2i8bVksT8dKc9NTi+DpYzupGzjJr9\nw/GfrFEDKI9jxnQuW0s5y+vEPj4sB9NIIyzQNAHigOt6p7/LuN/btSEGrl1G\no7zp4p5YKbW6q9+zYB6GQlaS5/jGuCJjgGSAFe448MaKHdf6bB0etSYQ6YgT\nkCQ9eP2p4MEDcmG5hcF2VMuB0qz6h+M2NIEvpRI3IXUme8/5jM1s/btBXQqu\n1Qnh4celAi7fF4tRkG37wbPe9IWe7Zc16WVl8U/3M/XvqhHjnBNcqJTAxH+4\nwC9Q15kdDL1iF183O1Q8fZ8r8Qw/5gfNDjoyQ4j1NGpx4mmYtNeoHXsPIj8/\nzse+OBJ3PNPC8cC6ujkivAXddAKXLJ+F+s0Vm8Zf/u0fRySBfpV4YoA9R1qt\nUUvOl9BlI3Z3/8JsOhwFtYNpu5rGoWkLQxDIQC+47yA1PShYDt2antfK61FN\nA0qPr2KEVsg5PLNKtPa+TZgNbHiPzCqczx3HPKV5RN8nBjv6CSezU/xasLl5\n4hF+\r\n=QB9d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrHuuElJKS/57uPcTrlFPcTbJ6SkAR8ak/pzdy+Ml0OwIgR2VJE8wcspH61uckaWKPGGSSUrlYkjDIrWUyyweSB+4="}]},"maintainers":[{"name":"castle-lemongrab","email":"harpsmashing@gmail.com"}],"_npmUser":{"name":"castle-lemongrab","email":"harpsmashing@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/iniedit_0.0.1_1597180802791_0.23349034458039086"},"_hasShrinkwrap":false},"0.0.2":{"name":"@castlelemongrab/iniedit","version":"0.0.2","license":"MIT","description":"A simple command-line INI file editing tool based on ini-parser","author":{"name":"Castle Lemongrab, a subsidiary of Baby Britain, Ltd."},"main":"src/ini.js","repository":{"type":"git","url":"git+https://github.com/castlelemongrab/iniedit.git"},"dependencies":{"@castlelemongrab/ioh":"^0.0.4","@castlelemongrab/oath":"^0.0.2","@castlelemongrab/strr":"^0.0.1","@jedmao/ini-parser":"^0.2.4","jsDump":"^1.1.0","line-reader":"^0.4.0","yargs":"^15.4.1"},"devDependencies":{"chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-js-factories":"^0.1.5","mocha":"^8.0.1","uuid":"^8.3.0"},"scripts":{"clean":"rm -f ./test/temp/*.ini","test":"./node_modules/mocha/bin/mocha -t 5000 test/unit test/integration"},"black":{"lives":"matter"},"gitHead":"47701af170a4bf041c85655fd43deaa394f4486e","bugs":{"url":"https://github.com/castlelemongrab/iniedit/issues"},"homepage":"https://github.com/castlelemongrab/iniedit#readme","_id":"@castlelemongrab/iniedit@0.0.2","_nodeVersion":"14.2.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-aYtQY5J07agmpiyEN3NJVvadrLzBQo37cdwHu5Qtfq8mFF4pxxA6k8Vsz4D0x+dl2gl8a+Gf5Az7QmIYsdLkEg==","shasum":"bd14bc7b8ffe08c0cda18d9a97462f83d2126776","tarball":"https://registry.npmjs.org/@castlelemongrab/iniedit/-/iniedit-0.0.2.tgz","fileCount":20,"unpackedSize":48912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNWtmCRA9TVsSAnZWagAAAWAP+QCJ1tZJqaM6uBiThAZg\n4coKdYt8q+V3M/XucTLcxWqGZ4a5gF3wSLxyWK2/QA5ATRF8G6nyiU17LlTo\nEYRwcR+jD844HfHGGAAHI2mP7z9guaeCLP37ZA52PDNZrIw/bJ3w5U4aKn/y\n0ySaxIfxvUngGVasf1RPBps+rQ+78qxvKkaxL4JO7RQdj8JCAFVjzT2PUSKs\nLDA6F2ywCPEt+fj5UpDw2x7nDaL4W4cwCXuMp6EdKM2FisZiTVYbz9IPWUXc\n6jgPjlzsARNm18uBCJpd2eGPfGCvbcwlT1z2T6fCFJdEFabqEoazDnfBDMl8\n3GfGTv1SQq9XDZYEznTl/7OZcN8tAjZkzC6QHC9UHESxqVatlOmWRWar2u7w\nkwyWtv9hnh70nRwaxhmER9B8Ga0Xi4qJpJTS+HuneKURPx2S8B16VYV1blOB\nSCUwlWR/7CJ9w/r2MPlp7h+qaNmc2QMS77ATMv+wvodnZBudcuIViQ+CMOzZ\n9HGN95ACjKMK6UcoQ3CY+IO6ZxCtsc0UhWmV0DOyIh35KbZ1ztXsOYz8TKTU\nDjMwf/T7HscsgKA8Oj/7vxQovYzO1SdDUtCMTAQg5GQJMK56J7+rfB1eavd7\nNNflAk5pOO7+MfXa5s6BI1WG/TMTlGW+N6iAxn+aefvGbUJ4a5mvpyXHrex7\nPHlD\r\n=93T6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB2fBPB2gB8KsEZclY4A/7eSWAJx8lou53XvCos0bF9mAiAi3RPH6+DcXu45T8Ub8p998NgIT4Jzhxq9pJzTNDgHAg=="}]},"maintainers":[{"name":"castle-lemongrab","email":"harpsmashing@gmail.com"}],"_npmUser":{"name":"castle-lemongrab","email":"harpsmashing@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/iniedit_0.0.2_1597336421861_0.6780264207745206"},"_hasShrinkwrap":false},"0.0.3":{"name":"@castlelemongrab/iniedit","version":"0.0.3","license":"MIT","description":"A simple command-line INI file editing tool based on ini-parser","author":{"name":"Castle Lemongrab, a subsidiary of Baby Britain, Ltd."},"main":"src/ini.js","repository":{"type":"git","url":"git+https://github.com/castlelemongrab/iniedit.git"},"dependencies":{"@castlelemongrab/ioh":"^0.0.4","@castlelemongrab/oath":"^0.0.2","@castlelemongrab/strr":"^0.0.1","@jedmao/ini-parser":"^0.2.4","jsDump":"^1.1.0","line-reader":"^0.4.0","yargs":"^15.4.1"},"devDependencies":{"chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-js-factories":"^0.1.5","mocha":"^8.0.1","uuid":"^8.3.0"},"scripts":{"clean":"rm -f ./test/temp/*.ini","test":"./node_modules/mocha/bin/mocha -t 5000 test/unit test/integration"},"black":{"lives":"matter"},"gitHead":"57fdf140eaa210aec648bcab658ac7320847a61b","bugs":{"url":"https://github.com/castlelemongrab/iniedit/issues"},"homepage":"https://github.com/castlelemongrab/iniedit#readme","_id":"@castlelemongrab/iniedit@0.0.3","_nodeVersion":"14.2.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-tRN8bVRD8d7bbHQ/fkoyXJR8LsdWKj6MSGrkRp4RpXB3W4Oe1bFTH+fLiiEihu5B7jT+zCrrg4Bv/Z1p6lxiqw==","shasum":"061251a330cfb005703477dbfaed9907d0aad8c5","tarball":"https://registry.npmjs.org/@castlelemongrab/iniedit/-/iniedit-0.0.3.tgz","fileCount":22,"unpackedSize":52019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOZGgCRA9TVsSAnZWagAAK0YP+wZQjJtNWoXkDpTd8SAU\nFm1GLytZv2gYzwUsAUnbzsSv3l1HCdUC7HxnXABjZ5HA6g79ttweAGQGYIOz\nGlFRJWjdG8hLb7Oms+N5BQ5U6R+MRy4nz+JghTPkzlBuLsHujPI/6y6LV6NK\nYZEGIWwHnHI5Bz/RWGHYvD0D9TSI40TEkYswzB9Rp8Isxqir2QvX31uWYZSY\nVSMiC++S59gogZ2s2nij8lSObJRVSn2up2eJnHBZ1S2pyVFS3PN4CkwVRbdu\nBi5WwKhU3dy2ldXfvzlntiqp06p7VAwsSa2akbxkH3aiSrRJytPikir84Vj+\nUAASVQXIAzMyUtWNF/hVSu4uAHe0qYf4QKQYtqaOlbnJB/nnEzhRDCueXPAB\n0vKXc/VpL+5Z8QPBFjss6KdUhxO5V148XKEpd54IXO/TzcHFV+MGI7qI0kT4\nkwLh9VuQ3s322M+4BNYkwJ+ZpAwvIW34ehRRjd73YETapB9nFH8SKvv0u1qO\nCcLVi2Qzt9V8WepvG99kaGDkaF945Cgy7iJ9/fZzBLB6F0oxUM+n0ohCxtsj\nQBHa282ihfmp/2u0hUApLhXZA0HEvoNt9bhAjpdLk1Eu9PHUglnYnZggjl3F\nslFzoh5tkP8qBykpRf8tgZ7A12T+o0FlK5ccpRDSwyhg6CPjb5Wf6FZUipP9\nwD40\r\n=XOmA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzy8dAA+VDG/+oOWmZJ8lvbQOsMqGC7ykCbOHLxBvbrwIgAw+yUp+Sc5a+JInIS15uu1Gym0LBYLSkcQmNxDERiIw="}]},"maintainers":[{"name":"castle-lemongrab","email":"harpsmashing@gmail.com"}],"_npmUser":{"name":"castle-lemongrab","email":"harpsmashing@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/iniedit_0.0.3_1597608351669_0.22673680554599995"},"_hasShrinkwrap":false},"0.0.5-pre1":{"name":"@castlelemongrab/iniedit","version":"0.0.5-pre1","license":"MIT","description":"A simple command-line INI file editing tool based on ini-parser","author":{"name":"Castle Lemongrab, a subsidiary of Baby Britain, Ltd."},"main":"src/ini.js","repository":{"type":"git","url":"git+https://github.com/castlelemongrab/iniedit.git"},"dependencies":{"@castlelemongrab/ioh":"^0.0.4","@castlelemongrab/oath":"^0.0.2","@castlelemongrab/strr":"^0.0.1","@jedmao/ini-parser":"^0.2.4","jsDump":"^1.1.0","line-reader":"^0.4.0","yargs":"^15.4.1"},"devDependencies":{"chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-js-factories":"^0.1.5","mocha":"^8.0.1","uuid":"^8.3.0"},"scripts":{"clean":"rm -f ./test/temp/*.ini","test":"./node_modules/mocha/bin/mocha -t 5000 test/unit test/integration"},"black":{"lives":"matter"},"gitHead":"c921a91ad9a8babbf1816b51f09d6f32dc3598ca","bugs":{"url":"https://github.com/castlelemongrab/iniedit/issues"},"homepage":"https://github.com/castlelemongrab/iniedit#readme","_id":"@castlelemongrab/iniedit@0.0.5-pre1","_nodeVersion":"14.2.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-pzYnf2r+jPLgdQPsaT0844y/cZYC5dc6RD7IoKQYoj6gW6FGxK09dhJzyw86cklZMzdq3/m8E7rCKOMIAQEI2A==","shasum":"b77cd25c0c52e9434aa7301a5e9928ea8e537587","tarball":"https://registry.npmjs.org/@castlelemongrab/iniedit/-/iniedit-0.0.5-pre1.tgz","fileCount":25,"unpackedSize":54425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfZLPICRA9TVsSAnZWagAAJ28P/RXg2sxZ4jQNrHcFsRig\nfBr/nu5HV0rWHEPnKlRWW8vWw9GJhlLShGTmnqeNNzLW4x6i1zwtlr2+UIfP\nT1yDtxYh1P/wKERGPfTM/qZ9Dt7Oh8PZu+UiWEBg2PLNNqm0LQ6LgSYmapHK\nhxONv8XVgch7K7cqGQhoU27Q9qn/ojG2iud0Wp97KNI68Rcu48wK8AfBnbKF\nlWgh3QSxxgXWe1dKN2pTSFpY99G6ODlIWYM56u0uTclyv0b461ITiudYA+dA\njcNFRIVMM50TRu13CTXbZuqQes7MxACyjjbNwwXZJ03sAmZYRKHt+F+l8oMR\noLN8qpHXwaHhnkjuTOqFZdpa3OudascQrNeKKJw9MhTCp1XIK7285fm2CEVh\nbhXxw9JF20IaLcQ4+CC6dNLF9ZOY/qs4C/Zwj18vLlwuGT9P3LFb2lLSykmv\nTpM01sA4J4S9SDczn5QDg8PJqXBjfuQgB/RQQwMZhrwXl3eq1AzScPhjjlfy\nKiiQ77oU2NOC3rV5Rbn8VkHw/UBuPk42UjoMa0B8aWlvTWe9JFbwN9qc3rAD\nVFA9sWPvduFiiVMbhvdtIdWeGnD4u6Pxfv4uSfWVnV+1rblOievMHvLEQbpp\nzKwykXErec0GixIHqsJgCtiWnsPk8TdRXOgfOupfOckcGhpMBuq2pwu4wmHk\n8gj8\r\n=OSkH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJmnvQ4zssmnCt3jH14rgRxt29LWJxNysSgNE60MT1BQIgae/FPohDxyt2lwzByOMNkX/ZJsohWdSpIJ4vm/Q8n8o="}]},"maintainers":[{"name":"castle-lemongrab","email":"harpsmashing@gmail.com"}],"_npmUser":{"name":"castle-lemongrab","email":"harpsmashing@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/iniedit_0.0.5-pre1_1600435144276_0.5529549994012188"},"_hasShrinkwrap":false}},"time":{"created":"2020-08-11T21:20:02.529Z","0.0.1":"2020-08-11T21:20:02.938Z","modified":"2022-04-04T22:03:58.735Z","0.0.2":"2020-08-13T16:33:41.973Z","0.0.3":"2020-08-16T20:05:51.831Z","0.0.5-pre1":"2020-09-18T13:19:04.494Z"},"maintainers":[{"name":"castle-lemongrab","email":"harpsmashing@gmail.com"}],"description":"A simple command-line INI file editing tool based on ini-parser","homepage":"https://github.com/castlelemongrab/iniedit#readme","repository":{"type":"git","url":"git+https://github.com/castlelemongrab/iniedit.git"},"author":{"name":"Castle Lemongrab, a subsidiary of Baby Britain, Ltd."},"bugs":{"url":"https://github.com/castlelemongrab/iniedit/issues"},"license":"MIT","readme":"\niniedit\n=======\n\nIntroduction\n------------\n\nThe `iniedit` utility is a small program for adding, updating, and deleting\nsections and/or entries in Common INI Format files. It provides a Javascript\nAPI and command-line interface, and allows for conditional criteria to be\nspecified as preconditions for any section modification, addition, or deletion\noperation.\n\nThis repository is a work in progress and absolutely should not be used in\nproduction at this time.\n\nCLI Quick Start\n---------------\n\nIn addition to an ES7 Javascript API, this package provides a fully-functional\ncommand-line executable called `iniedit`, which is suitable for small one-off\nmodification of INI files. To get started, run `npm i @castlelemongrab/iniedit`,\nthen `iniedit -h`, `iniedit add -h`, `iniedit delete -h`, or `iniedit modify -h`\nto view built-in documentation.\n\n### Example: Build an INI file from /dev/null\n\n```shell\niniedit add -f /dev/null \\\n  -s Section -l A=1 -l B=2 -c Comment > my.ini\n\n[Section]\n# Comment\nA = 1\nB = 2\n```\n\n### Example: Conditionally add a new INI section\n\nIf a section named `Section` exists with property values `A = 1` and `B = 2`,\nthen add a new section named `Section #2` with properties `A = 2` and `B=3`.\n\n```shell\niniedit add \\\n  -f my.ini -x Section -n A=1 -n B=2 -s 'Section #2' -l A=2 -l B=3\n\n[Section]\n# Comment\nA = 1\nB = 2\n[Section #2]\nA = 2\nB = 3\n```\n\n### Example: Adding a property to multiple sections\n\nRegular expressions can be used to match section names, property names, and\nproperty values. This example adds or replaces an INI line (N.B. section\nproperty) named `Type` in any INI file section that begins with `Section`.\n\n```shell\niniedit modify -f my.ini \\\n  -r -x '^Section.*' -l Type=Awesome\n\n[Section]\n# Comment\nA = 1\nB = 2\nType = Awesome\n[Section #2]\nA = 2\nB = 3\nType = Awesome\n```\n\n### Example: Deleting a section with regular expressions\n\nRegular expressions can be used to match section names, property names, and\nproperty values. This example seletes an INI section thst has a certain\nmatching property value; the key is ignored.\n\n```shell\niniedit delete -f my.ini \\\n  -r -n '.*=3'\n\n[Section]\n# Comment\nA = 1\nB = 2\nType = Awesome\n```\n\n### Example: Editing properties\n\nThis example adds a new key/value pair and comment to any section that starts\nwith `Section` and has a `Type` of `Awesome`.\n\n```shell\niniedit modify -f my.ini -r \\\n  -x '^Section.*$' -n 'Type=Awesome!?' -l ' Key = Value' -m Extra\n\n[Section]\n# Extra\n# Comment\nA = 1\nB = 2\nType = Awesome\nKey = Value\n```\n\nCLI Documentation\n-----------------\n\nThe command-line interface makes references to INI file \"lines\"; these are\nsection-contained INI properties specified as `key = value` pair arguments.\nBackslash (`\\`) is the escape character for the `key` portion; values are\ncurrently passed along as-is. This CLI escaping behavior – along with escaping\nand quoting behavior in serialized INI files themselves – will be made more\nconfigurable in a future version.\n\n```\niniedit <command>\n\nCommands:\n  iniedit read    Read from one or more matched sections\n  iniedit add     Add an entire section to an INI file\n  iniedit delete  Delete an entire section of an INI file\n  iniedit modify  Modify properties in an INI file section\n\nGlobal Options:\n  --version              Show version number                           [boolean]\n  -h, --help             Show help                                     [boolean]\n  -v, --verbose          Print extra information to standard error     [boolean]\n  -f, --file             The input file in common INI format [string] [required]\n  -x, --require-section  Only modify this section name matches           [array]\n  -n, --require-line     Only modify if this line exists                 [array]\n  -m, --require-comment  Only modify if this comment exists              [array]\n  -r, --regex            Interpret all match criteria as expressions   [boolean]\n```\n```\niniedit read\n\nRead from one or more matched sections\n\nLocal Options:\n  -l, --line             The property/line values to read                [array]\n  -c, --comments         Also print all comments, in order             [boolean]\n\n```\n```\niniedit add\n\nAdd an entire section to an INI file\n\nLocal Options:\n  -s, --section          The name of the section to add      [string] [required]\n  -l, --line             A line to add, or key name to read from stdin   [array]\n  -c, --comment          A comment string to add                         [array]\n  -t, --top              Add the new section to the top of the file    [boolean]\n```\n```\niniedit delete\n\nDelete an entire section of an INI file\n\nLocal Options:\n  -c, --compactify       Compact whitespace on both sides of deletion  [boolean]\n```\n```\niniedit modify\n\nModify properties in an INI file section\n\nLocal Options:\n  -l, --line             A line to add, or key name to read from stdin   [array]\n  -c, --comment          A comment string to add                         [array]\n  -d, --delete-line      A line name to delete                           [array]\n  -o, --delete-comment   A comment string to delete                      [array]\n  -e, --section          A replacement section name                     [string]\n```\n\nAPI Documentation\n-----------------\n\n<a name=\"constructor\" />\n<h3><pre>\nIni.Default\n</pre></h3>\n\n```typescript\nlet ini = new Ini.Default(_string: String, _options: Object)\n```\n<p>\nCreate a new instance of the INI file modification engine.\n</p>\n<dl>\n  <dt><code>_string</code></dt>\n    <dd>\n      <i>Optional</i>: Contents of the INI file to pass to <code>parse</code>\n    </dd>\n  <dt><code>_options</code></dt>\n    <dd>\n      <i>Optional</i>: An associative array of generic opeions as an `Object`\n    </dd>\n</dl>\n\n<a name=\"query\" />\n<h3><pre>\nIni.Query\n</pre></h3>\n\n```typescript\nlet q = new Ini.Query(\n  _sections: Array<String|RegExp>?,\n  _where: Array<[ String|RegExp, String|RegExp ]>?,\n  _comments: Array<String|RegExp>?\n);\n```\n<p>\nCreate a search query predicate for use with the `Ini.Default` methods\n<a href=\"#add_section\"><code>add_section</code></a>,\n<a href=\"#delete_section\"><code>delete_section</code></a>,\n<a href=\"#modify_section\"><code>modify_section</code></a>, or\n<a href=\"#read_properties\"><code>read_properties</code></a>,\n</p>\n<dl>\n  <dt><code>_sections</code></dt>\n  <dd>\n    <i>Optional</i>: An array of section names that should be matched\n    against the section names in the INI file.. Values are case-sensitive\n    strings and/or regular expressions. This is an OR operation; of any\n    one of the specified criteria matches, the section matches.\n  </dd>\n  <dt><code>_where</code></dt>\n  <dd>\n    <i>Optional</i>: An array of two-tuple (key/value pair) properties\n    that must match in order for the the transformation to be applied.\n    Both keys and values are case-sensitive, and may be strings or regular\n    expressions. THis criteria is combined via AND: all clauses must match\n    in order for a section to match.\n  </dd>\n  <dt><code>_comment_where</code></dt>\n  <dd>\n    <i>Optional</i>: An array of comment text that must exist for a match\n    to occur. Values are case-sensitive text and/or regular expressions.\n    These are ANDed together; all must exist independentely and match.\n  </dd>\n</dl>\n<p>\nCreate a new query for the INI file transformation system. \n</p>\n<dl>\n</dl>\n\n<a name=\"parse\" />\n<h3><pre>\nini.parse\n</pre></h3>\n\n```typescript\nini.parse(_string: String)\n```\n<p>\nCreate an internal abstract syntax tree from the INI file contents specified\nin `_string`.\n</p>\n\n<a name=\"serialize\" />\n<h3><pre>\nini.serialize\n</pre></h3>\n<p>\nEmit the internal abstract syntax tree, using this instance's <code>IOH</code>\nobject.  To capture or redirect output, provide an <code>IOH</code> instance\nvia the constructor's <code>_options.io</code> parameter.\n</p>\n\n\n<a name=\"transformer\" />\n<h3><pre>\nIni.Transformer\n</pre></h3>\n\n```typescript\nlet transform = new transformer(ini.tree);\ntransform.run(\n  _query: Ini.Query, _fn: Function(_i: Number, _section: Object)\n)\n```\n<p>\nCall <code>_fn</code> and allow it to modify any section of the parsed INI\nfile's abstract syntax tree if the predicates provided match. A set of\nentirely empty predicates will match any and all sections.\n</p>\n<dl>\n  <dt><code>_query</code></dt>\n  <dd>\n    <i>Optional</i>: An instance of Ini.Query specifying matching criteria\n    for the modifications requested. If a section does not match, it will\n    not be modified.\n  </dd>\n  <dt><code>_fn</code></dt>\n  <dd>\n    <b>Required</b>: The transformation function to be applied. The\n    function's prototype is `fn(i, section)`, where `i` is the section\n    offset in `this.tree`, and `section` is the name of the section\n    being transformed,\n  </dd>\n</dl>\n\n<a name=\"delete_section\" />\n<h3><pre>\nini.delete_section\n</pre></h3>\n\n```typescript\nini.delete_section(\n  _query: Ini.Query\n)\n\n```\n\n<p>\nRemove an INI file section that matches the query <code>_query</code>,\n</p>\n<dl>\n  <dt><code>_query</code></dt>\n  <dd>\n    <i>Optional</i>: An instance of Ini.Query specifying matching criteria\n    for the modifications requested. If a section does not match, it will\n    not be altered in any way.\n  </dd>\n  <dt><code>_query</code></dt>\n</dl>\n\n\n<a name=\"modify_section\" />\n<h3><pre>\nini.modify_section\n</pre></h3>\n\n```typescript\nini.modify_section(\n  _query: Ini.Query,\n    _properties: Object?, _comments: Object?, _name: String?\n)\n```\n\n<p>\nModify an INI file section that matches the <code>_sections</code>,\n<code>_where</code>, and <code>_comment_where</code> criteria.\n</p>\n<dl>\n  <dt><code>_query</code></dt>\n  <dd>\n    <i>Optional</i>: An instance of Ini.Query specifying matching criteria\n    for the modifications requested. If a section does not match, it will\n    not be altered in any way.\n  </dd>\n  <dt><code>_properties</code></dt>\n  <dd>\n    <i>Optional</i>: An <code>Object</code>-based associative array of new\n    properties to add. Keys are interpreted as new or replacement property\n    names; values are interpreted as new or replacement property values. A\n    value of <code>null</code> is interpreted as a request to repove the\n    entire INI line whose property name matches the key.\n  </dd>\n  <dt><code>_comments</code></dt>\n  <dd>\n    <i>Optional</i>: An <code>Object</code>-based associative array of new\n    comments to add. Keys are interpreted as new or replacement comments;\n    values are interpreted as either null or non-null. If a value is non-null,\n    the comment is added. If a value is strictly null, the comment is removed\n    if it exists.\n  </dd>\n  <dt><code>_name</code></dt>\n  <dd>\n    <i>Optional</i>: A <code>String</code> to replace the section name with.\n    If this option is null or undefined or omitted, the section's name will\n    remain the same.\n  </dd>\n</dl>\n\n<a name=\"add_section\" />\n<h3><pre>\nini.add_section\n</pre></h3>\n\n```typescript\nini.add_section(\n  _name: String, _properties: Object?,\n  _comments: Object?, _should_prepend: Boolean?, _query: Ini.Query?\n)\n```\n<p>\nAdd a new section to an INI file, provided that the <code>_sections</code>,\n<code>_where</code>, and <code>_comment_where</code> criteria match at least\none section in the abstract syntax tree. If all three criteria are omitted or\nempty, this function considers it a match, and adds the requested section.\n</p>\n<dl>\n  <dt><code>_name</code></dt>\n  <dd>\n    <b>Required</b>: The name of the new section to be added.\n  </dd>\n  <dt><code>_properties, _comments</code></dt>\n  <dd>\n    For information on what these arguments mean and how they are structured,\n    see the <a href=\"#modify_section\"><code>modify_section</code></a> method.\n  </dd>\n  <dt><code>_should_prepend</code></dt>\n  <dd>\n    <i>Optional</i>: True if the section should be added at the beginning of\n    the abstract syntax tree (and therefore at the top of the resulting INI\n    file). False or false-like if the section should be appended to the\n    abstract syntax tree (and therefore at the bottom of the resulting file).\n  </dd>\n  <dt><code>_query</code></dt>\n  <dd>\n    <i>Optional</i>: An instance of Ini.Query specifying matching criteria\n    for the modifications requested. If a section does not match, it will\n    not be altered in any way.\n  </dd>\n</dl>\n\n<a name=\"read_properties\" />\n<h3><pre>\nini.read_properties\n</pre></h3>\n\n```typescript\nini.read_properties(\n  _query: Ini.Query?, _names: Object, _comments: Boolean?\n)\n```\n<p>\nFor all sections matching the <code>_sections</code>, <code>_where</code>,\nand <code>_comment_where</code> criteria, write the INI property values\nprint the value of any property name that appears in <code>_names</code>.\nEmit results to the current IO object (or standard ourpur) in file order.\n</p>\n<dl>\n  <dt><code>_query</code></dt>\n  <dd>\n    <i>Optional</i>: An instance of Ini.Query specifying matching criteria\n    for the modifications requested. If a section does not match, it will\n    not be altered in any way.\n  </dd>\n  <dt><code>_names</code></dt>\n    An object containing property names as keys; values for these keys will\n    be printed to the current IO object (or standard output) in file order.\n  <dd>\n  </dd>\n  <dt><code>__comments</code></dt>\n  <dd>\n    <i>Optional</i>: True if all comments in matching sections should be\n    included in the output in file order. Comments will appear in file order.\n  </dd>\n</dl>\n\nCredits\n-------\n\nCopyright 2020, David Brown  \nCopyright 2020, Baby Britain, Ltd.\n\n\nLicense\n-------\n\nMIT\n","readmeFilename":"README.md"}