{"_id":"@byndyusoft/casc","_rev":"3-71a4e1eb08ec55470f8568c592818f3c","name":"@byndyusoft/casc","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"@byndyusoft/casc","version":"1.0.0","description":"Configuration as Code solution for Node.js (and not just)","keywords":["conf","config","configuration","preferences","settings"],"homepage":"https://github.com/Byndyusoft/node-casc#readme","bugs":{"url":"https://github.com/Byndyusoft/node-casc/issues"},"repository":{"type":"git","url":"git+https://github.com/Byndyusoft/node-casc.git"},"license":"MIT","author":{"name":"Byndyusoft"},"main":"./dist/index.js","types":"./dist/index.d.ts","bin":{"casc":"dist/bin/index.js"},"scripts":{"prebuild":"del-cli ./dist","build":"tsc --project ./tsconfig.production.json","build:standalone":"gulp standalone","lint":"yarn run lint:eslint && yarn run lint:markdown && yarn run lint:prettier","lint:eslint":"eslint --ignore-path ./.gitignore --max-warnings 0 --ext .ts,.js .","lint:eslint:fix":"eslint --ignore-path ./.gitignore --fix --ext .ts,.js .","lint:fix":"yarn run lint:eslint:fix && yarn run lint:markdown:fix && yarn run lint:prettier:fix","lint:markdown":"markdownlint --ignore-path ./.gitignore \"./**/*.md\"","lint:markdown:fix":"markdownlint --ignore-path ./.gitignore --fix \"./**/*.md\"","lint:prettier":"prettier --ignore-path ./.gitignore --check \"./**/*.{ts,js,json,yaml,yml,md}\"","lint:prettier:fix":"prettier --ignore-path ./.gitignore --write \"./**/*.{ts,js,json,yaml,yml,md}\"","semantic-release":"semantic-release","start":"node ./dist/bin/index.js","start:dev":"ts-node ./bin/index.ts","test":"jest --testPathPattern ./test","test:coverage":"jest --collectCoverage --testPathPattern ./test","test:integration":"jest --testPathPattern ./test/integration","test:integration:coverage":"jest --collectCoverage --testPathPattern ./test/integration","test:unit":"jest --testPathPattern ./test/unit","test:unit:coverage":"jest --collectCoverage --testPathPattern ./test/unit"},"jest":{"collectCoverageFrom":["./{bin,src}/**/*.ts","!./bin/index.ts"],"coverageThreshold":{"global":{"branches":100,"functions":100,"lines":100,"statements":100}},"preset":"ts-jest","setupFiles":["reflect-metadata","./bin/cli/pjsonProxy.ts","./test/oclif.jest.setup.ts"],"testEnvironment":"node"},"dependencies":{"@oclif/command":"^1.8.0","@oclif/config":"^1.17.0","@oclif/errors":"^1.3.3","@oclif/parser":"^3.8.5","@oclif/plugin-autocomplete":"^0.2.0","@oclif/plugin-commands":"^1.3.0","@oclif/plugin-help":"^3.2.0","@oclif/plugin-not-found":"^1.2.4","ajv":"^6.12.5","cli-ux":"^5.5.0","dotenv":"^8.2.0","handlebars":"^4.7.6","js-yaml":"^3.14.0","lodash":"^4.17.20","manipula":"^1.2.11","node-rsa":"^1.1.1","reflect-metadata":"^0.1.13","ts-essentials":"^7.0.0","tslib":"^2.0.1","tsyringe":"^4.3.0","yn":"^4.0.0"},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@types/gulp":"^4.0.6","@types/jest":"^26.0.14","@types/js-yaml":"^3.12.5","@types/lodash":"^4.14.161","@types/node":"^14.11.2","@types/node-rsa":"^1.0.0","@typescript-eslint/eslint-plugin":"^4.2.0","@typescript-eslint/parser":"^4.2.0","del":"^6.0.0","del-cli":"^3.0.1","eslint":"^7.10.0","eslint-config-prettier":"^6.12.0","eslint-plugin-import":"^2.22.0","eslint-plugin-jest":"^24.0.2","eslint-plugin-prettier":"^3.1.4","eslint-plugin-simple-import-sort":"^5.0.3","gulp":"^4.0.2","husky":"^4.3.0","jest":"^26.4.2","markdownlint-cli":"^0.23.2","moq.ts":"^6.4.0","pkg":"^4.4.9","prettier":"^2.1.2","prettier-plugin-packagejson":"^2.2.6","semantic-release":"^17.1.2","stdout-stderr":"^0.1.13","tmp-promise":"^3.0.2","ts-jest":"^26.4.0","ts-node":"^9.0.0","typescript":"^4.0.3"},"engines":{"node":">=12"},"publishConfig":{"access":"public"},"oclif":{"bin":"casc","commands":"./dist/bin/commands","plugins":["@oclif/plugin-autocomplete","@oclif/plugin-commands","@oclif/plugin-help","@oclif/plugin-not-found"],"topics":{"config":{"description":"manage config"},"init":{"description":"init CASC"},"init:keys":{"description":"init private and public keys"},"values":{"description":"manage values"}}},"pkg":{"scripts":["./dist/**/*.js","./node_modules/cardinal/themes/**/*.js","./node_modules/cardinal/cardinal.js"]},"gitHead":"c8b55e437bb0f12448ac95d8d669efb64a40cd6c","_id":"@byndyusoft/casc@1.0.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Bwgnadp2VXjw7iYjAh1seIu8Z1NH05xsB7VWyziu4amzsp4VrOyd+HtIkb+pnDjmyrHtqgJ69zdYsCg9rKK90g==","shasum":"5880aa2e6adea1a10a112edf0a1f47cb96c0cafd","tarball":"https://registry.npmjs.org/@byndyusoft/casc/-/casc-1.0.0.tgz","fileCount":478,"unpackedSize":222844,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcre7CRA9TVsSAnZWagAAChwP/2tLQ5FOYga+tAnb07JX\nVCR/5sByn7vIWN6TvUx/ZmHEAZEhpsyhey5Z7o8dQZsoXJq9XJIAs3GQvahr\nR/Yh+jvNpJPs6FHy6mwUmMnqZW4i4aMgh8KMyoLSxNEMUXWQt2bUexOAhDve\nrusSa3OUQfGRlj/EsTQTQYII60SRvzqah4AOC/6NHAQDK8rPmUCXN/0ChHl8\nBr2u8K9+55qtXf3xk0WFOAtjIjGtKVRQV7Zo7kVvCg+fZkXVI1sBz487KjxL\nZjmd+p/oZX7MXYQU7s4bU2PDcQd1fAeTntV+W0gw4hnjzpsFBiZuXirtJcWQ\nGYSewhVDxygNSIKPxhRL5MyX2oyL15YV2laZ3LjP9ojgGWRv6Y+id+Aa0Mzz\nUwJtCDSp+rTlnD4pE+gTqVi+chNvz/0313Qt25OmGEv3fegFU67fydHhNpI3\n3ODGpC9L9F8Lex/d8MgkyxVD0oOQqnIMP4aroKZxsPmGUZwotwtIcvwz0+oJ\n5Ps+WdOHe6GkXicqbJ5hubnPrxxazEcpM3ieRaHCJTY/0R9yxE274wMNZA+J\ngFxe3sf2houswU6oKunFaIrMLlrZN1lQDR7p4YrgRVAGRJI7I69ONZ736kZF\ntJN2v92LxjoPom8oeKOa+PQN+FlquOYXA4jbPU09tK+wjDQ4JQuYg2Dx1NY3\nMYL3\r\n=93D4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEe2W2RZ9UqVhR4hriqnDTcSsqebm17poOnbwJiN7/fgIgPAwXf273gTczFnuVONJR97P8Ilwy8VS2+nZapamZerc="}]},"maintainers":[{"name":"razonrus","email":"iruslansafin@gmail.com"},{"name":"dmitriy.litichevskiy","email":"litichevskiydv@gmail.com"},{"name":"sadcitizen","email":"sadcitizen@yandex.ru"},{"name":"alexanderbyndyu","email":"alexander.byndyu@gmail.com"}],"_npmUser":{"name":"alexanderbyndyu","email":"alexander.byndyu@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/casc_1.0.0_1601353658914_0.8098673847060749"},"_hasShrinkwrap":false},"1.1.0":{"name":"@byndyusoft/casc","version":"1.1.0","description":"Configuration as Code solution for Node.js (and not just)","keywords":["conf","config","configuration","preferences","settings"],"homepage":"https://github.com/Byndyusoft/node-casc#readme","bugs":{"url":"https://github.com/Byndyusoft/node-casc/issues"},"repository":{"type":"git","url":"git+https://github.com/Byndyusoft/node-casc.git"},"license":"MIT","author":{"name":"Byndyusoft"},"main":"./dist/index.js","types":"./dist/index.d.ts","bin":{"casc":"dist/bin/index.js"},"scripts":{"prebuild":"del-cli ./dist","build":"tsc --project ./tsconfig.production.json","build:standalone":"gulp standalone","lint":"yarn run lint:eslint && yarn run lint:markdown && yarn run lint:prettier","lint:eslint":"eslint --ignore-path ./.gitignore --max-warnings 0 --ext .ts,.js .","lint:eslint:fix":"eslint --ignore-path ./.gitignore --fix --ext .ts,.js .","lint:fix":"yarn run lint:eslint:fix && yarn run lint:markdown:fix && yarn run lint:prettier:fix","lint:markdown":"markdownlint --ignore-path ./.gitignore \"./**/*.md\"","lint:markdown:fix":"markdownlint --ignore-path ./.gitignore --fix \"./**/*.md\"","lint:prettier":"prettier --ignore-path ./.gitignore --check \"./**/*.{ts,js,json,yaml,yml,md}\"","lint:prettier:fix":"prettier --ignore-path ./.gitignore --write \"./**/*.{ts,js,json,yaml,yml,md}\"","semantic-release":"semantic-release","start":"node ./dist/bin/index.js","start:dev":"ts-node ./bin/index.ts","test":"jest --testPathPattern ./test","test:coverage":"jest --collectCoverage --testPathPattern ./test","test:integration":"jest --testPathPattern ./test/integration","test:integration:coverage":"jest --collectCoverage --testPathPattern ./test/integration","test:unit":"jest --testPathPattern ./test/unit","test:unit:coverage":"jest --collectCoverage --testPathPattern ./test/unit"},"jest":{"collectCoverageFrom":["./{bin,src}/**/*.ts","!./bin/index.ts"],"coverageThreshold":{"global":{"branches":100,"functions":100,"lines":100,"statements":100}},"preset":"ts-jest","setupFiles":["reflect-metadata","./bin/cli/pjsonProxy.ts","./test/oclif.jest.setup.ts"],"testEnvironment":"node"},"dependencies":{"@oclif/command":"^1.8.0","@oclif/config":"^1.17.0","@oclif/errors":"^1.3.3","@oclif/parser":"^3.8.5","@oclif/plugin-autocomplete":"^0.2.0","@oclif/plugin-commands":"^1.3.0","@oclif/plugin-help":"^3.2.0","@oclif/plugin-not-found":"^1.2.4","ajv":"^6.12.5","cli-ux":"^5.5.0","dotenv":"^8.2.0","handlebars":"^4.7.6","js-yaml":"^3.14.0","lodash":"^4.17.20","manipula":"^1.2.11","node-rsa":"^1.1.1","reflect-metadata":"^0.1.13","ts-essentials":"^7.0.0","tslib":"^2.0.1","tsyringe":"^4.3.0","yn":"^4.0.0"},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@types/gulp":"^4.0.6","@types/jest":"^26.0.14","@types/js-yaml":"^3.12.5","@types/lodash":"^4.14.161","@types/node":"^14.11.2","@types/node-rsa":"^1.0.0","@typescript-eslint/eslint-plugin":"^4.2.0","@typescript-eslint/parser":"^4.2.0","del":"^6.0.0","del-cli":"^3.0.1","eslint":"^7.10.0","eslint-config-prettier":"^6.12.0","eslint-plugin-import":"^2.22.0","eslint-plugin-jest":"^24.0.2","eslint-plugin-prettier":"^3.1.4","eslint-plugin-simple-import-sort":"^5.0.3","gulp":"^4.0.2","husky":"^4.3.0","jest":"^26.4.2","markdownlint-cli":"^0.23.2","moq.ts":"^6.4.0","pkg":"^4.4.9","prettier":"^2.1.2","prettier-plugin-packagejson":"^2.2.6","semantic-release":"^17.1.2","stdout-stderr":"^0.1.13","tmp-promise":"^3.0.2","ts-jest":"^26.4.0","ts-node":"^9.0.0","typescript":"^4.0.3"},"engines":{"node":">=12"},"publishConfig":{"access":"public"},"oclif":{"bin":"casc","commands":"./dist/bin/commands","plugins":["@oclif/plugin-autocomplete","@oclif/plugin-commands","@oclif/plugin-help","@oclif/plugin-not-found"],"topics":{"config":{"description":"manage config"},"init":{"description":"init CASC"},"init:keys":{"description":"init private and public keys"},"values":{"description":"manage values"}}},"pkg":{"scripts":["./dist/**/*.js","./node_modules/cardinal/themes/**/*.js","./node_modules/cardinal/cardinal.js"]},"gitHead":"f043856862f9af97b3cf04bc5552f82bfa8c6071","_id":"@byndyusoft/casc@1.1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZzD+upM4BjQdisPMVcE1oqLgnPXoNP1UGLxy72bBwg+E6UYR/66kmZx1ytgw+jaDoDFQbUmmAGOyTV/Y8uqK+g==","shasum":"8c5944238b0dba7f537041c237e64003ae345337","tarball":"https://registry.npmjs.org/@byndyusoft/casc/-/casc-1.1.0.tgz","fileCount":483,"unpackedSize":225967,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfq2L8CRA9TVsSAnZWagAA3FUP/jrsItZarSr8Rv14VTFY\ntoIFu4N3VCt7RdIXrNlEec7xQwRtR1APrbmp3Dcf7YNgw26vNqDlxqeriZnI\nMz1Gl7btgFTTMuKKgJnRsKOV7+kwCNZ7kFCC7AiIWbLu0E3d21rKoFAOSdKu\n1sDWZo+sShVsHw1OYqC1Du1iDkYQ++M2UoToTfDN5hOlW0uHQbPjOQ76maqn\nx+kbl50m7XlWH9LVRJt6gPWlS5Ma2zG+0tY0x9Ut6eCKPrsgY0AEAlf5SIWE\nOf5P7TsodKURP27/BXakSdUom1s2yFkoTzJCh6bfDAiNVzbH9Lz8CNewqv72\nU/CZOBLK2q4CuhUShpdWoJMhsZ2TEVejmcqwCdsvhqcOs27i4Fjqfun4KNjO\nCWprMjQMCffmFXZtH2Qryo243GMfTZE0J1oVG+4l0F/+N0+779NB6K1W4IVx\ntaoXxYKlUwX0pBEvzbcETI4ypYlT1cHXesKods5RyZIVVfog5Pn9xNyNhZG2\nSorLouh7gjDxgLo6uKJ5FvfOUuuZGEskoC6FNeqpOIo4Xrt4EZl7X8yRuEKc\nXFdpmrjgi8BXABUSL+wYhLqlTTvjSlgRmLxb2os/+Cw4NgnN3plzYR6BshF6\ntHGROD8tB6PXNViaPe4MYyMGGZdUDLPHAIAtqo7hY4uHX8jjJSeDR38Gzt5e\n34bd\r\n=fsmx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDW8uZ08r5goE957tVhKd8fP+asCnlDNgSOfuhTT9RSDAIgblPQV4wqRzb+Jdg7HpWUQYigr/FrIP2yDz+Vt31Y/+c="}]},"_npmUser":{"name":"alexanderbyndyu","email":"alexander.byndyu@gmail.com"},"directories":{},"maintainers":[{"name":"razonrus","email":"iruslansafin@gmail.com"},{"name":"dmitriy.litichevskiy","email":"litichevskiydv@gmail.com"},{"name":"sadcitizen","email":"sadcitizen@yandex.ru"},{"name":"alexanderbyndyu","email":"alexander.byndyu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/casc_1.1.0_1605067515844_0.13910185249373974"},"_hasShrinkwrap":false},"2.0.0":{"name":"@byndyusoft/casc","version":"2.0.0","description":"Configuration as Code solution for Node.js (and not just)","keywords":["conf","config","configuration","preferences","settings"],"homepage":"https://github.com/Byndyusoft/node-casc#readme","bugs":{"url":"https://github.com/Byndyusoft/node-casc/issues"},"repository":{"type":"git","url":"git+https://github.com/Byndyusoft/node-casc.git"},"license":"MIT","author":{"name":"Byndyusoft"},"main":"./dist/index.js","types":"./dist/index.d.ts","bin":{"casc":"dist/bin/index.js"},"scripts":{"prebuild":"del-cli ./dist","build":"tsc --project ./tsconfig.production.json","build:standalone":"gulp standalone","lint":"yarn run lint:eslint && yarn run lint:markdown && yarn run lint:prettier","lint:eslint":"eslint --ignore-path ./.gitignore --max-warnings 0 --ext .ts,.js .","lint:eslint:fix":"eslint --ignore-path ./.gitignore --fix --ext .ts,.js .","lint:fix":"yarn run lint:eslint:fix && yarn run lint:markdown:fix && yarn run lint:prettier:fix","lint:markdown":"markdownlint --ignore-path ./.gitignore \"./**/*.md\"","lint:markdown:fix":"markdownlint --ignore-path ./.gitignore --fix \"./**/*.md\"","lint:prettier":"prettier --ignore-path ./.gitignore --check \"./**/*.{ts,js,json,yaml,yml,md}\"","lint:prettier:fix":"prettier --ignore-path ./.gitignore --write \"./**/*.{ts,js,json,yaml,yml,md}\"","semantic-release":"semantic-release","start":"node ./dist/bin/index.js","start:dev":"ts-node ./bin/index.ts","test":"jest --testPathPattern ./test","test:coverage":"jest --collectCoverage --testPathPattern ./test","test:integration":"jest --testPathPattern ./test/integration","test:integration:coverage":"jest --collectCoverage --testPathPattern ./test/integration","test:unit":"jest --testPathPattern ./test/unit","test:unit:coverage":"jest --collectCoverage --testPathPattern ./test/unit"},"jest":{"collectCoverageFrom":["./{bin,src}/**/*.ts","!./bin/index.ts"],"coverageThreshold":{"global":{"branches":100,"functions":100,"lines":100,"statements":100}},"preset":"ts-jest","setupFiles":["reflect-metadata","./bin/cli/pjsonProxy.ts","./test/oclif.jest.setup.ts"],"testEnvironment":"node"},"dependencies":{"@oclif/command":"^1.8.0","@oclif/config":"^1.17.0","@oclif/errors":"^1.3.4","@oclif/parser":"^3.8.5","@oclif/plugin-autocomplete":"^0.3.0","@oclif/plugin-commands":"^1.3.0","@oclif/plugin-help":"^3.2.1","@oclif/plugin-not-found":"^1.2.4","ajv":"^7.0.3","cli-ux":"^5.5.1","dotenv":"^8.2.0","handlebars":"^4.7.6","js-yaml":"^4.0.0","lodash":"^4.17.20","manipula":"^1.2.11","node-rsa":"^1.1.1","reflect-metadata":"^0.1.13","ts-essentials":"^7.0.1","tslib":"^2.1.0","tsyringe":"^4.4.0","yn":"^4.0.0"},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@types/gulp":"^4.0.7","@types/jest":"^26.0.19","@types/js-yaml":"^4.0.0","@types/lodash":"^4.14.167","@types/node":"^14.14.20","@types/node-rsa":"^1.0.0","@typescript-eslint/eslint-plugin":"^4.12.0","@typescript-eslint/parser":"^4.12.0","del":"^6.0.0","del-cli":"^3.0.1","eslint":"^7.17.0","eslint-config-prettier":"^7.1.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.3","eslint-plugin-prettier":"^3.3.1","eslint-plugin-simple-import-sort":"^7.0.0","gulp":"^4.0.2","husky":"^4.3.7","jest":"^26.6.3","markdownlint-cli":"^0.26.0","moq.ts":"^7.0.0","pkg":"^4.4.9","prettier":"^2.2.1","prettier-plugin-packagejson":"^2.2.9","semantic-release":"^17.3.1","stdout-stderr":"^0.1.13","tmp-promise":"^3.0.2","ts-jest":"^26.4.4","ts-node":"^9.1.1","typescript":"^4.1.3"},"engines":{"node":">=12"},"publishConfig":{"access":"public"},"oclif":{"bin":"casc","commands":"./dist/bin/commands","plugins":["@oclif/plugin-autocomplete","@oclif/plugin-commands","@oclif/plugin-help","@oclif/plugin-not-found"],"topics":{"config":{"description":"manage config"},"init":{"description":"init CASC"},"init:keys":{"description":"init private and public keys"},"values":{"description":"manage values"}}},"pkg":{"scripts":["./dist/**/*.js","./node_modules/cardinal/themes/**/*.js","./node_modules/cardinal/cardinal.js"]},"gitHead":"6aa0bc1d17e957b01cd09fa6b0e1709562fb3645","_id":"@byndyusoft/casc@2.0.0","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","dist":{"integrity":"sha512-muK5gbFiOa7KmtFW7E1UeYGGqrHZmFAfk4U6C+dXYPscEPH0DvHnyEf2SGLpeA/H02tfv54H3V5Ic2Tvg2WjVw==","shasum":"09a6210f1077270abc172ae32c4d33e6445c05b5","tarball":"https://registry.npmjs.org/@byndyusoft/casc/-/casc-2.0.0.tgz","fileCount":483,"unpackedSize":226087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9trbCRA9TVsSAnZWagAAFS8P/RVxyvUsQbRyktvmhzN5\nDAra3L8Y3FfwBazwddBXBH8KmzuWLnhsBLUommaZiQBofAVKh+FN5wDSvVaJ\n44MqMBNypiqPRrHcGcp/Xvnqe71qEk4eRJ2i3zn7/r5Ly37yiATfbK9zwrLM\nNV86oAolDdUEdZdt5qEp5et9fCdNsjkLBxIcF1cC/+2s7xm5Mcb9lHdpPi4G\nQ0MnIiRAmaQwvfUDxCim69k8Fa14WqowA37D3QrOwnn9YYVWUTs39p/vuexY\nbaZtgYmTLjW0YT1Hc6V+mYqdX+Y6spu1rPm3C99EV8i5zpQ0uESS5dT/5rdb\nF2EbaSPaQbRtA/HNF9rJhdv/3CY4iGHGBD6sw+4mk7PK1Ohuww+y0FY8VV6F\nOKslIK4mI3qo8911seqQiFOMWA0IoDuUd+3U8WcGvAvLy+1bQoTDBHCilIdB\nT/WSkvzcBUehRPXBPaMHE8oYJ3pFK+hqL3ujCa5Gc8glwLT4fqbSYrAfmoYQ\nwcB6U2+pI0CmRAsmXTXZ0AHDsq5MQWbcpCqfSPFVkWdEz64z9WhsL81XQO+0\nXcIW+29H71+RQfTPJqngZIvLRf6WqzxTK/xLQGjfRS9xeRjB3A77KNmv9iCh\nP+sLxA4AAyyJrfuEKLLpVKpWBzQsW6HY40rIuAXds6q7OGISknKfucDu3LBw\niukp\r\n=7qWG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpN0WHHikqSFcv9aMZjSO0l2PcpHTcB2cxUqVpi8pAHQIhAPKy71nPH+efGV/KvwNaITkN28Uu2xDL/w9zOE9olLkL"}]},"_npmUser":{"name":"alexanderbyndyu","email":"alexander.byndyu@gmail.com"},"directories":{},"maintainers":[{"name":"alexanderbyndyu","email":"alexander.byndyu@gmail.com"},{"name":"sadcitizen","email":"sadcitizen@yandex.ru"},{"name":"dmitriy.litichevskiy","email":"litichevskiydv@gmail.com"},{"name":"razonrus","email":"iruslansafin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/casc_2.0.0_1610013402753_0.6327293691291895"},"_hasShrinkwrap":false}},"time":{"created":"2020-09-29T04:27:38.569Z","1.0.0":"2020-09-29T04:27:39.112Z","modified":"2022-04-04T21:19:48.400Z","1.1.0":"2020-11-11T04:05:16.002Z","2.0.0":"2021-01-07T09:56:42.972Z"},"maintainers":[{"name":"alexanderbyndyu","email":"alexander.byndyu@gmail.com"},{"name":"sadcitizen","email":"sadcitizen@yandex.ru"},{"name":"dmitriy.litichevskiy","email":"litichevskiydv@gmail.com"},{"name":"razonrus","email":"iruslansafin@gmail.com"}],"description":"Configuration as Code solution for Node.js (and not just)","homepage":"https://github.com/Byndyusoft/node-casc#readme","keywords":["conf","config","configuration","preferences","settings"],"repository":{"type":"git","url":"git+https://github.com/Byndyusoft/node-casc.git"},"author":{"name":"Byndyusoft"},"bugs":{"url":"https://github.com/Byndyusoft/node-casc/issues"},"license":"MIT","readme":"# node-casc\n\n[![npm@latest](https://img.shields.io/npm/v/@byndyusoft/casc/latest.svg)](https://www.npmjs.com/package/@byndyusoft/casc)\n[![test workflow](https://github.com/Byndyusoft/node-casc/workflows/test%20workflow/badge.svg)](https://github.com/Byndyusoft/node-casc/actions)\n[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n_Configuration as Code_ solution for _Node.js_ (_and not just_) :pencil: :gear:\n\n<!-- @import \"[TOC]\" {cmd=\"toc\" depthFrom=1 depthTo=6 orderedList=false} -->\n\n<!-- code_chunk_output -->\n\n- [node-casc](#node-casc)\n  - [Introduction](#introduction)\n    - [Comparison with Helm](#comparison-with-helm)\n  - [Requirements](#requirements)\n  - [Install](#install)\n    - [Releases](#releases)\n  - [Quick start](#quick-start)\n    - [CASC directory structure](#casc-directory-structure)\n      - [Add files to `.gitignore`](#add-files-to-gitignore)\n    - [config.yaml](#configyaml)\n    - [settings.yaml](#settingsyaml)\n      - [`file` private or public key reading strategies](#file-private-or-public-key-reading-strategies)\n      - [`env` private key reading strategy](#env-private-key-reading-strategy)\n    - [values.yaml and values.override.yaml](#valuesyaml-and-valuesoverrideyaml)\n  - [Usage](#usage)\n    - [CLI](#cli)\n      - [Build config](#build-config)\n      - [Init CASC directory](#init-casc-directory)\n      - [Init RSA keys](#init-rsa-keys)\n      - [Decrypt values](#decrypt-values)\n      - [Encrypt values](#encrypt-values)\n    - [Library](#library)\n      - [How to build config](#how-to-build-config)\n  - [Maintainers](#maintainers)\n\n<!-- /code_chunk_output -->\n\n## Introduction\n\nSource code of the microservice and its configuration for different environments must be versioned and deployed from the same commit. This project takes care of generating config from a template and managing values for different environments.\n\n### Comparison with Helm\n\nWhy don't we just use Helm? Helm is heavily dependent on Kubernetes and this creates problems for various local scripts and migrating applications from Kubernetes to PaaS.\n\n| Feature                          | Helm         | node-casc    |\n| -------------------------------- | ------------ | ------------ |\n| Container Orchestration Platform | Kubernetes   | No limits    |\n| Microservice runtime             | No limits    | No limits    |\n| Runtime for configuration        | No limits    | Node.js      |\n| Template language                | Go templates | Handlebars   |\n| Output config format             | No limits    | YAML or JSON |\n| Support secret variables         | Plugin       | Built-in     |\n| Cryptography algorithm           | No limits    | RSA          |\n| Plugins                          | Yes          | No           |\n\n## Requirements\n\n- Node.js v12 LTS or later\n- npm or yarn\n\n## Install\n\n```bash\nnpm install @byndyusoft/casc\n```\n\nor\n\n```bash\nyarn add @byndyusoft/casc\n```\n\n### Releases\n\nFrom [releases](https://github.com/Byndyusoft/node-casc/releases/latest) you can download:\n\n- standalone version for Linux, Alpine, Windows and macOS\n- npm package tarball\n\n## Quick start\n\nExecute in your terminal to initialize CASC directory:\n\n```bash\ncasc init:dir\n```\n\nBy default CASC directory is `$(pwd)/.casc`.\n\n### CASC directory structure\n\n- `keys/` - directory with public and private keys for encrypting and decrypting secret values\n- `.env` - override `values.override.yaml` through `process.env` (see [dotenv](https://www.npmjs.com/package/dotenv) for syntax)\n- `config.yaml` - application config (see [Handlebars](https://www.npmjs.com/package/handlebars) for syntax)\n- `settings.yaml` - CASC settings\n- `values.yaml` - values for `config.yaml`\n- `values.override.yaml` - override `values.yaml`\n\n#### Add files to `.gitignore`\n\n- your private key\n- `.env`\n- `values.override.yaml`\n\n### config.yaml\n\nHandlebars helpers:\n\n- `str` - convert value to string\n- `exists` - checks that all values exists\n\n### settings.yaml\n\nDefault settings:\n\n```yaml\ncrypto:\n  strategy: rsa\n\nprivateKey:\n  format: pkcs8-private-pem\n  strategies:\n    file: private.pem\n    env: CASC_PRIVATE_KEY\n\npublicKey:\n  format: pkcs8-public-pem\n  strategies:\n    file: public.pem\n```\n\nProperties:\n\n- `crypto.strategy` - asymmetric cryptography algorithm, only `rsa` supported\n- `privateKey.format` - private key format, `rsa` supports only `pkcs8-private-pem`\n- `privateKey.strategies`\n  - key of this object is name of private key reading strategy (the order of the keys depends on the order in which the strategies are applied)\n  - value of this object is settings for strategy\n- `publicKey.format` - public key format, `rsa` supports only `pkcs8-public-pem`\n- `publicKey.strategies`\n  - key of this object is name of public key reading strategy (the order of the keys depends on the order in which the strategies are applied)\n  - value of this object is settings for strategy\n\n#### `file` private or public key reading strategies\n\nStrategy settings are a string or an array of strings, where each item is a path to a private or public key. The first found key will be read. If the path is relative, then it will be relative to the `keys/` directory.\n\n#### `env` private key reading strategy\n\nStrategy settings are a string or an array of strings, where each item is a key of `process.env`. The first found key will be read.\n\n### values.yaml and values.override.yaml\n\nExample structure:\n\n```yaml\nVALUE_NAME:\n  env_name: some value\n  other_env_name:\n    - some host 1\n    - some host 2\n    - some host 3\n  env_name_with_encrypted_value*: 6JM8YlugHyjnzatv/nOB7A==\n  env_name_with_decrypted_value!: secret value\n  default: default value if current environment is not found\n```\n\nOnly english letters, digits and underscores are allowed in value names and environments. The digits at the beginning is prohibited. Values can only be strings, numbers, booleans, nulls, or their arrays.\n\n## Usage\n\n### CLI\n\nWe do recommend using this project as a CLI in order to avoid inadvertently affecting your application.\n\n#### Build config\n\n```text\nUSAGE\n  $ casc config:build\n\nOPTIONS\n  -c, --cascDir=cascDir    [default: /app/.casc] CASC directory\n  -e, --env=env            (required) environment\n  -o, --override=override  [default: true] override values\n  -y, --yaml=yaml          [default: false] YAML output instead JSON\n```\n\n#### Init CASC directory\n\n```text\nUSAGE\n  $ casc init:dir\n\nOPTIONS\n  -c, --cascDir=cascDir  [default: /app/.casc] CASC directory\n```\n\n#### Init RSA keys\n\n```text\nUSAGE\n  $ casc init:keys:rsa\n\nOPTIONS\n  -b, --bits=bits           [default: 2048] RSA key size in bits\n  -c, --cascDir=cascDir     [default: /app/.casc] CASC directory\n  -f, --format=(pkcs8-pem)  [default: pkcs8-pem] keys format\n```\n\n#### Decrypt values\n\n```text\nUSAGE\n  $ casc values:decrypt\n\nOPTIONS\n  -c, --cascDir=cascDir  [default: /app/.casc] CASC directory\n  -y, --yaml=yaml        [default: true] YAML output instead JSON\n```\n\n#### Encrypt values\n\n```text\nUSAGE\n  $ casc values:encrypt\n\nOPTIONS\n  -c, --cascDir=cascDir  [default: /app/.casc] CASC directory\n  -y, --yaml=yaml        [default: true] YAML output instead JSON\n```\n\n### Library\n\nWe do not recommend using this project as a library in order to avoid inadvertently affecting your application.\n\n#### How to build config\n\n```typescript\nimport \"reflect-metadata\";\n\nimport {\n  container,\n  IConfigBuilder,\n  IConfigBuilderToken,\n  IContextBuilder,\n  IContextBuilderToken,\n  IValuesReader,\n  IValuesReaderToken,\n} from \"@byndyusoft/casc\";\n\nconst configBuilder = container.resolve<IConfigBuilder>(IConfigBuilderToken);\nconst contextBuilder = container.resolve<IContextBuilder>(IContextBuilderToken);\nconst valuesReader = container.resolve<IValuesReader>(IValuesReaderToken);\n\nconst config = await configBuilder.build(\n  await contextBuilder.build(\n    process.env.NODE_ENV,\n    await valuesReader.read(true),\n  ),\n);\n\nconsole.log(config);\n```\n\n## Maintainers\n\n- [@Byndyusoft/owners](https://github.com/orgs/Byndyusoft/teams/owners) <<github.maintain@byndyusoft.com>>\n- [@Byndyusoft/team](https://github.com/orgs/Byndyusoft/teams/team)\n","readmeFilename":"README.md"}