{"_id":"tc-tool","_rev":"126-b5b83e3f301c3eb1d4801fe86097e9ff","name":"tc-tool","dist-tags":{"next":"2.0.0-rc.1","beta":"4.0.3-beta","latest":"4.1.0"},"versions":{"1.0.0":{"name":"tc-tool","version":"1.0.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.0.0","maintainers":[{"name":"neutrinog","email":"info@neutrinographics.com"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"435036631721db60e111b8d683ea0007a2d2c231","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.0.0.tgz","fileCount":25,"integrity":"sha512-fNUyRX+RiPt/SOCgxRqlNKDDGsekhHrOh6noUm56fBOJOu1mIPMMS0w/M5uDTGLdmdL218oJZR5OUzWjo6rLhQ==","signatures":[{"sig":"MEYCIQCW4XlHNpn2NAG9Jo0BJjcE0IVdhpsvarlnZFR9V9QP5QIhAJgBrLlnBEI4Q71KNbnOUVnOvko9JCmAzZ9a2lwW+sud","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":113743},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","gitHead":"5fdc553ec3819ca8b3e894d4723d7c395982e122","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.6.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.9.4","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.0.0_1519324606941_0.8207861818126911","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"tc-tool","version":"1.0.1","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.0.1","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"bb943cfda9e1afa724bb4c311519dda8d6e8e143","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.0.1.tgz","fileCount":23,"integrity":"sha512-hA4g/cgwX2jbWX6lKAbIbsAcdn6w1+HYoiLIT+hW7Lw44aHzKM4XA/sX/3f5qN7jK13GElTEfRGREE02JFNF+g==","signatures":[{"sig":"MEUCIQDV0CZA4LRDT5EVDUp8CrXJ0aZxyL5oZZHFgS6cllVsmgIgacoKVtvv98X1T6grk3nsxVdqnFLz/xPX0BDRHNBsXO0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":101650},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","gitHead":"4d07018cd21dc76a4ee5fd3137773e942d789cc4","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.6.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.9.4","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.0.1_1519433556872_0.7650925960350552","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"tc-tool","version":"1.0.2","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.0.2","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"21b8a4361d94ccd66b512348ac63bf662c7186c6","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.0.2.tgz","fileCount":23,"integrity":"sha512-F1WsVl+y3rgh6A1M9AnsqWhz/bQyKbrtkuPV09aevCsJo8WOsI7ri/j7XWn/wXYxjjw2hdmmrKfb7oewETKyvw==","signatures":[{"sig":"MEUCIQC8kTpiC2/WZ3Fhvbog6ErdjXVHXOySZZifcJFBTpP01AIgSt8TwJ9WgC+xe+1yhjbXKvGLDYxhkpSUOzlCqRV4IvI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":102309},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","gitHead":"480a161cf1cc5017e1be0a1b43e14c4a0d422b97","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.6.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.9.4","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.0.2_1519434453230_0.8649745709730907","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"tc-tool","version":"1.0.3","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.0.3","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"d296d0a170f3f60f4f3a034929f14d58054c56da","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.0.3.tgz","fileCount":23,"integrity":"sha512-RVTJ4PEejz+0ZCSZreCOxv46913V63LJLMaPGTDP7MmyHesSCYHsHQ5PZhrMOUN2FhZOQD7J70klLGrLrP694g==","signatures":[{"sig":"MEQCIAD/p/RVY2HvFk7yx3Nk0ctFrsehK/7vld66QigbkfTOAiAVRU0GgA90n34rwmwyt3oVqcYjYnxn8UFUguXOEMPZJA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":102008},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","gitHead":"352e630c7c68c417dfd35671f2d46f9dc53b9fcf","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.6.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.9.4","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.0.3_1519435559148_0.22253122793311308","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"tc-tool","version":"1.1.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.1.0","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"3ea91b309d456f969b25f4f210178741ee827e07","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.1.0.tgz","fileCount":23,"integrity":"sha512-iK4LOhyXvwVF/HUgQFnrRl7KsZ+453dJvFZkSHHbNia7VramU7BJDgUQsv0YeLKiHeFgUz951Ffn8pnle51FLw==","signatures":[{"sig":"MEQCHwUzgHsnU5Z4fo5xBDbES62u2KU6Vze88havWTQmYAECIQDkbnk+sW8gnkUjG+q16TtEgIQ3wdM3WkllMsQz0vsGAQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98895},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","gitHead":"a98b4905e1fb87d075a7d0bc79c4acf48ea4f66c","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.6.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.9.4","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.1.0_1519769025012_0.30838416157488324","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"tc-tool","version":"1.2.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.2.0","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"87c43b2cd2c70dcb989167b27719977f402f172d","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.2.0.tgz","fileCount":23,"integrity":"sha512-BM1wGdNcWrWf4XKvLP59YGjfzSIAEqbwe/AGQR0YjEq9WIt3Bb5TduANYrISZ6biq2Xo1136o06Tu1FprBtnkg==","signatures":[{"sig":"MEYCIQD4gMG8fskUjLK/A5dTgD7LLmAgO2cTBWPiMrdQcQM/GQIhALoiOBNkOzSagRCN7m5FyVrfTLyU2YQZfpIkDmb9k+Wa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99982},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","gitHead":"06d09fd21227121c818525f62abfcb96e1fd2853","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.7.1","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.9.4","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.2.0_1520459281133_0.9117311900105305","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"tc-tool","version":"1.3.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.3.0","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"3bbc7544f8e82f91d4435f4f0d3c3d4b012f438a","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.3.0.tgz","fileCount":23,"integrity":"sha512-SBlJUokTnzsVjEO9/uzGjjlvMgy8S3xmKykbWXMipVkV2URzAn5q6G7KfG6oOqlBTQGjECQi1ThCiK+sQX7fXw==","signatures":[{"sig":"MEUCIH8x3Ca7u6QFEkd7byFNvik9SBRS5tAHCRujUcnxZQsrAiEApRqG0Szdlpx8nk2vpAsM49DM4e6xDW77qzBHPUwLBaA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100168},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","gitHead":"a133b51ddceca7320573ad2b5eeca6cb3922ad1a","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.7.1","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.10.0","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.3.0_1521135448336_0.41540299348176446","host":"s3://npm-registry-packages"}},"1.4.0":{"name":"tc-tool","version":"1.4.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.0","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"f7378ac609db0d943fe1ef9e993fbc4a09011286","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.0.tgz","fileCount":25,"integrity":"sha512-bH9xmlM3R/7jTCnwUBpEqTntN+V6QsJEHsQOlKtnaecSfQur4Wmu6tgJ8KBx9DNDlTr44DShPgHe5HXQm41lGQ==","signatures":[{"sig":"MEUCIHIE/5BTN9N47fiav8SrigI1HRpLp2iTsMyPRoVDFtxkAiEAirKtPc3buPpCAtoDN9+XEa5/l+1HiBM4ujPZg3qjbGg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6gByCRA9TVsSAnZWagAAp+0P/RpSoRYolu04iY76AS9o\nmJs8gyawOX3WobwXp3DljxcM/dAkac3KQEfmwPe+pBGVS5d3z+EvuZvEO/h9\nS8LYcAdZq3QNLDPxM/ZQxmNQez7LhtLuDMYSsrVjCdPVYcVX0C4eixzv47F8\nbxgSDpEDc3sghyZdw+oS9HOw3LGp0OkBfbJ9XPKSNqIMJybhpgFJAtdsf9lZ\nouze1nGmOWpSlTZHdaV94i386H8X3nTfYq9e2+162xRr9OCmHN4fwlChpgDL\nZnR+RWLcWG33s07tKpc+c3x7jF83aThsSpZndez1+C0uTeIEp0uR8YsdSsHE\ntKwOnNN7eRUwYOTCJGvsZ6o+RpxzjrI3aDoQjYKY1JQQO/AjkO0vL4yGfmCk\nmjggFOuWDBQ2mEjyhl83rUjkIHOtzg35f7F8qukS6a+2TkSRNQ1ZEzyPY8hZ\n3wxrIT5FsSiKXE6IQQdF4HfgrfcA0OWVjr1EonGmReA616x07Bse5z0qMf+S\nOvMpG1u84wea5UfGOzQKdEeQAJlWexZTg2kQ0pEMIia6qY6uLdu3/R0jgdzX\nTaOgZpOQAM6cS58qLJPMf11ktB53KILO5RZ6nj/QEGCDNnmQro0OCnaOG8H3\nVoJPex8Or0ZfYh5FE+BL33aEWbIAFBOa89cZCKy0nWMGA6GkZKR/aAs37i6U\nQOdQ\r\n=JuMS\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","gitHead":"f017ad17600ae346d0c6e57be9ad090403cea4e2","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.0_1525284977653_0.7846549131498228","host":"s3://npm-registry-packages"}},"1.4.1":{"name":"tc-tool","version":"1.4.1","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.1","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"a2b29fffa00c1450870677d792ca3b9a38444498","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.1.tgz","fileCount":25,"integrity":"sha512-KHbs3SEAO7S3yPcX8YJc2Tl8ABKunpTFqWZc1DX9pyZR1OhEA4mOWQekj+RX0/D2LEpiwLu9ZnhRC6jKJy+E5g==","signatures":[{"sig":"MEUCIQCbwsEUJrHCfAj7LfOKSU1AcrYw/wUrR6ZFrkydmZJIfgIgIPZlY11K3NMkwthvjGubgSnH2ofo2wc8gf7Hv5uc6oM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97070,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8PARCRA9TVsSAnZWagAApEMP/A+ZvvQna8gAKaOgEk0w\nGfSUkdkTh+yUtNUaOuXyh8ZeYgRvsWqwXAzXDKZ+xk1zB+UWUVM6Hm+/8kv9\nKt6mdYevnV4/zOxWCjFgc6ZO2NAcIrDn9WrPrltLsvcYUZX6Itt1KbptdFr0\n7MP55+U230WLs/fx29VWyp4p2yv97MnE4k1V98m8FiwYa6jrZBSatdqb56eS\npvXP4BsVFzgRJHfZ4QiqefIYuZSuLhWdUHbGOuh7YSXJvScXzx8nBJBSWwz/\nhTJdLuVE5Q8d904YiLqQrTZtMCtT9jItKSsnvXGbskkymw0FoXxwNcbpvFmM\nwAxvJVfudcrbUMdZ7zIgiMRTJxDtPTqJ2EJNzJKgNZyo+9rSp9XaVGCJ+Ve2\nx6waQPtPiGu43qtwKhBHdT7DS004ktq6sjNdMbFFX02yHoZHDN5XB3VNEvUL\n2Ds5tb0oVkDruYpgUK9KtfZiHm9nfNxcumg23qVNorU41VlDqh74tusjh3kb\npnk+q9xOS8yUP/ujwbnRAO6ABSs7fttxb4sIjT2YP97L59vcINDCgfglRw3D\ngioDghGXh6fnHj+lGYNJ+01pcl00hRC6+WQVUOgYHsUEHiXViENDTHfrSlfV\n6QyKZY6lgM8uC5TX4KIXKxTuEQITdgDNkA4AUcmvvttmKjwh1MZGSlrmb51+\nhxSD\r\n=TnWH\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","gitHead":"f017ad17600ae346d0c6e57be9ad090403cea4e2","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.1_1525739536105_0.07257365225001533","host":"s3://npm-registry-packages"}},"1.4.2":{"name":"tc-tool","version":"1.4.2","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.2","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"a82dbf15695936d38d53fb9da1bdb86e46922803","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.2.tgz","fileCount":26,"integrity":"sha512-urkmMFWGU+7b+CNdc/j0uPEPzpo0boMJrwyIvEaasUaRJpl/ac2bdjvjmEeunz1smGuEu69JVp2TGdRSyv0SCg==","signatures":[{"sig":"MEQCIFm+i2R+oU2gSZGsWMRJb5xqEcz5lTm7ooUg4EsO4a3vAiByKFWrFbN2BpHX+hL1cNzVxTZBlDzpQSyKVjZOECfAZQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8PnJCRA9TVsSAnZWagAA2EkP/jUIjnXNoGHK/IuzAs4V\nmDRg8kOR0ahN6Dt6p4Ol7ofrMHms3kebUP+QrqMYIL/ogfef/Cu9NADKN4sf\nyzOviQM6yj/xxvJfGU0MI0g6EqmgI9I9cxhBI5Flm8JoysSZm5TdxK2MYKYp\ngBQ3qBfaFr+R9H8jpWrNO7yQa3Fl7mwzxQazldnE+/vlhMEI3OzQttIb1w5c\n/JsemOEZobD9mzkQ9sgCItsXilfyoCygCcZfTZN2hFUkx9BrfyKEJns1b8jM\nVyGEIrpuLFygnYhzB7jiG7GpT1NhYWpDA8OXRZh7srSB6HDcBofC9Yq03IhQ\nx2rtrP5ZoRUDAYfofy6MMTMsf8RlUNN/yLVXyE1kXj85MeAdM8pHYJ6hf8jr\nq7FZKyPk+PGwQCarV+r6x+0p61DH3/4zOaeeOHnly5Jqh7LCJLTyHWwkrIOO\num1YLtHsnZ3jMPApnB1uwWRpiZ+Ge2zU16S4p9KfvF26mOo3bacHjq8BgQtK\nDNgS3B2/3jcuMm9fABX/0RnLH1XpgJa3ZhETrjHI3l4Tn0VbFTbgPereKZ9U\nPGgy9ov3OjsD38xblhMLwp8xBE08gv+WXKnCwjz9MYZhbPrkhBvqEbtdl57Z\nOirNdZ0yBciu3b2MOhpfAmsLLYbJ4o38Oic6kkMZO3SHnQBbj1UpPBWdl2cH\nz79t\r\n=CocZ\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"694d3f12e0155fd0171fd0615cd1ea8ba4b500e3","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.2_1525742025357_0.2480911391746412","host":"s3://npm-registry-packages"}},"1.4.3":{"name":"tc-tool","version":"1.4.3","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.3","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"7a105196b1d20643b0f9eed498657525f5374317","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.3.tgz","fileCount":29,"integrity":"sha512-Q0unl0UFb0xOh2IMbKjIq9IVQQ7DkBeE7lSXsA2eMPSIpWAym2tNn9JdZV+rXV8wVNUXv8fasf2cXNf0hTwIaw==","signatures":[{"sig":"MEUCID7nngZSzml1A8lcL3IX7qsLsqYs5Z9v0K+1DB0sPatFAiEA/zL6WGjBSUj9bWWF1A8jKrS+egm6ekC/Ri/+c1GFalw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":109436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8grQCRA9TVsSAnZWagAAVL8P/i64HYSYt+uYnY7wnziX\nbGuTW9PEetqhsJA0RDDuq08ohaBzOuQsoAoMHKpUyK1VcPiplP8du8TWYgfu\nV2drmtYXuHsxmhBm+58SFQkm0QR5nsmMADBsHRuXYoRnAj0l0MosTsCUYtKk\n4f+iP803pr9nCo3N5rhEqT2adXSXvyRjVBm8/G++Ke/sPChF6g3ixkRKKpSw\nqTbVD0fEzMMJBwuxHZUALisymIFkkwHbxorfLgkcYtuEVUTlMsRgGPGSDzqx\nlIJsz6Az9fPBaP11Q0ZiDb8AAlu4DixXUb0D4UNyVFIbuCAV5aTzQR2UUxV/\nrAZMhTS6k2PsCasIwRJy0xVwlrroHwt8HEyqcvwVvHNbU6Bdfuq4/z4NREkf\nzfS4x2tmwVlUEApkt2i9HZ2CNwWPANu7ynjpnuCsEiXgRBCrfvdmQB2bS251\nhfwAqjBImNzU5xa2AAc9yazzEmdz9UtqE2BsGS3eGKPFQ+b4yXIB/1CPoh1c\n5I2jrPXcWp6iQ3iRTG9fONyeem2Me1q9FzSSiWvNpWJjAi4pXqgpxgWPQE+g\nqDrtN6GGn6wV2YOe+z86varIDEg6kbowph0x0G4OEuBsZcsc+wWOtH4KXskp\ndhjXgyFIG+M8qJYIt3GQ7N9h7En1QHLQS1wYZtrwYPUj124ntesSLkQiSs3P\nQXpP\r\n=J1bE\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"f11d5a38df0502dff5d1199d30615425bc85154d","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.3_1525811920249_0.46476519251043014","host":"s3://npm-registry-packages"}},"1.4.4":{"name":"tc-tool","version":"1.4.4","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.4","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"8e1a53f35c6bb4df84d96e979bc4950b912f2796","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.4.tgz","fileCount":29,"integrity":"sha512-Z130/0wWK37Tb7XA73qdznYbwdklhbhsOdChv6iWRziZdiWAqTYDXjIoHpWPWdjZh0bE+GIjN+V4DpBulTxZSQ==","signatures":[{"sig":"MEUCICVwdeIrCcAdPRVu8PsZVRMBf9wVjX3LQyuKZH2cbJvJAiEA2uxWqiyuBHk+3lvV0nuRZ1BwNjcvaLyj9MiFMKxm30Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":112684,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8iQ/CRA9TVsSAnZWagAAt8YQAIB0nf46RLDJkqUIFVng\nSz8fdLqVD4SbRTlLfWBZbDunU3Xi3xWm2rYyO3kKZBhU4zDpjUzawO9G9POP\ngcAOJN2CA9UU2p52upqx1G3zNpkNDqxI9DYXoTGo5UkBRveYDqjZ9I4UBcoz\nPuBb9ANXz3bHaN0DSiEQj8Fo5oH/JqFYtOqYMKSH/PlzYQRBXSS/bBQW99nc\nd9L4Ke/Fw10fCCEpjbFIyArjLx1akwy7o5fg1yzT/aKS7fi/zAvA3iJTWvKy\nRWOaaAFyufW43TlhLW46Fn9ruQ4I+ETZJbgSvPgfWQllip6rsLYbCNaWTCK8\nd59DtT32mFu+WkikPlr4hHSkwi2pqgx6qjM9Spt5ncBpFhym2Ev9N/HgO9LK\nzkExpbe5Pv1sotta9Okd6jmAdTJKESJtH/vdPYX9/ZRZEPGBPAurhWpI3DlF\nz1p1Qm2pFjLZeARpxEMPGvrVK9ZtOCzuF1vmXhkznLc1RdAXbZP6vOOsLGJ1\nMydO8TYm4mrDRhaC9qZgFOpilkuXQ6g9Q4fTJsvZegJzmQkwTKW1hHl7zw5f\nCZ+h4RCiSVYrzuzMw4Q97w6enkhJWQdwEl7nVTlc/VtAGrJnAnjtRJ9wK8YG\nHf47C5840dsCXxbWCSabG8CqEkdTuM6TeENBlS0evdud7/3M/eZrm5+HgCxf\nXLLI\r\n=mMnk\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"ecbcd6282ff080550f5145fd6d9b9b42ba0ea658","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.4_1525818430703_0.09616920222328851","host":"s3://npm-registry-packages"}},"1.4.5":{"name":"tc-tool","version":"1.4.5","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.5","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"6dbb752fd5229018e82a227ef734188e47064daf","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.5.tgz","fileCount":29,"integrity":"sha512-T6f9kBJEcMrYFBW7C+yWof3/Fiej5dDFgAZ/PCfm17GayAaYsTUMhrDlN5HKF8LQleWzUJ+CyoPFZGoa4+Et/A==","signatures":[{"sig":"MEYCIQC7GdIwaKwnOIVid4WRxQX/+9d0qZpzZ0/LeWWrCXvllQIhAOxW4w5H6OqEWTUpfx5xJwnr0czBio3TVLa38ErP0NBX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":113051,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8i72CRA9TVsSAnZWagAAbpkP/R2dN5C7AwV0wqg2PTOy\n13cJodVjDdYzhJBBdOp4HdqseIf34HNwjyfYw3ONMaI/FQLq/EdxYkqAXyLx\nlwxGnuNRqM4DQRoNHmAqe89Y1ZMryqHy+bpqbbpDlINyTWBNpXMWw5pkVBYR\nqNmaSMpn2Hh7TnGDIzlMuuZRoCWnuNIS+BkYLmuL6u78FPDbYCuvDxB4cYb8\nZREKOSmCZlfdp4Dr4ilR9LANe/KWfvyU5rqtZ4q9zaJokdOkm4/jtf1Zdg61\nRa4jROyCfYv0QZjqodR7Y3cXL0+/9uHtQmgzvwoCBxheeHeHhBYd1qhZnw9N\nXD60bcnX5ktNHnVdMDuM7bLJnkvuVkY0RivrT/g2bRaNjzmfP1AQC6tTPLod\nDsvWRJYK8OdTRmURzT5qWQ18Qoddxl6bHZYSX/9KvQE+eyQjZYS/orsflSwa\nzQyGcUoQZ8ETssefDntD4bIBv+UqadQODtXgJTS1Tgur3ZdjiDYuIBWhbO0e\nbIIaFIP+yUM3VoNeQn3sPrhCp6IojZGh1XnbYeKkPgSvzSRjrnKf7+tDKDgN\nw6YS7N6doJaORWoFhxs0fc72L3ErSgz33/pUnx0nkYn8yz2CqAGD7/4DbNCT\nOkR4zowbmNrP0mdEZAUnvpSsn6A3VTtw+APReJ0DtO6hWwePlF3PYAv5TeW7\nDB2z\r\n=rR0W\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"9c1a1dc5204fc6695177f841353e68f70ea8be20","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.5_1525821174517_0.653993585951429","host":"s3://npm-registry-packages"}},"1.4.6":{"name":"tc-tool","version":"1.4.6","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.6","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"f3ef83193359d4ae75b1e75b2801fd25e57628d9","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.6.tgz","fileCount":29,"integrity":"sha512-LtQ2wprEM6Tm3TTB8ehhi360oI8Hw4LIV7pUBD85l6wiN4wnKCMfizWFL7EuzTXrzgNZERyhng4xYcGXF/huJQ==","signatures":[{"sig":"MEYCIQCFTC60zb6NCnLZ1f4YuZelH8bz2yVYI0K+BzLVOre1TQIhAK/WRdVhuON+lkQzO+XvI/Sc68ZwT+4f5r4pc6NEMHof","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":113690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8jQNCRA9TVsSAnZWagAAO/sP/0jTURIwVqHH5aBDfa6P\n54HYG8iGga4UE6uIzUQvjhnpiE0uZc8Hbp37RbDrTuTbWDpIlRv/sRVMnl6k\nFmN8LrujE9EfAZHSjcwuITJCNr9yuV/XKnXOO10mjmmGCrbJjr4XHamdHE4G\n/srNt/pc1PZH5kD9xG8SQKS6e7lWB1gBJXigxJdlO/f67x4Acv0g0Y9zu4nI\nZIRQJB+0QMaOSxSOKw7xUbX6W08SIPTPEko1CL2yw0kqMCtMr+/J/ZMUlsMC\nOTWx9SJqvnOy4vni+wXZ8uHdHlgVZ21FnRG//cubIgDP//9OUQKmPzxIL9mp\nfO7lP0RQLx2quDgpT1IONkG39yGms3pUAMBRy6vCg8J4BNGOV+bCajnhMtiC\nEgDF+qmq8/yrOwP0+S6bZF6VOuHyL9rAl12jFXZeyfp9CN9FptIutMkCvxQ5\ntMcb+SjtkBHrvFyrAa8zuI7C6TvS65QWTmsWEF9lsNK01ArM55F7Kz4Is6tA\nWKliv+OeR+zwOsEkS76lT0y59ZBmw5cwEbgkpy/o0jEd+jjTqtCE7gerMvbQ\n3d7VuMfRYHbvg+Ta1PyLlDT/S3CrNplVlm2sKar5Oh3j+TQe4dlmprxsNWsz\no9Ln/UE6/2/SICiqjMv1Fgnl1i6+1TfDfbx/V4UuBjK6EBREZhK0EKOo7IQA\nl3E5\r\n=rJy/\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"6a864fe8924e51b0be1a8de999932cfe48436125","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.6_1525822476767_0.49552570183558053","host":"s3://npm-registry-packages"}},"1.4.7":{"name":"tc-tool","version":"1.4.7","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.7","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"ecc1b8bea3e677b15bcbe96c02a79d56cb0866fa","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.7.tgz","fileCount":29,"integrity":"sha512-+B9J3Gg0C5Uq4VBGgOV30+X+3/spWHZjFc43wF7MSiDZ0ImE2//rKmeyQgdd7i9T8WNUi3NELsFbqjG+4NqgbA==","signatures":[{"sig":"MEUCIFrS8wuqoH0RHSKnCrz3MbL+LveWW4kxYOosp1spSrxkAiEAnIlBWg11eeXLyXIIp0lcXVl7mKYIa8lf+bzWUjfWN/s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":114140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8koeCRA9TVsSAnZWagAAx70P/2AX5O/jmQBEU6kmy5xK\nFOii3CHJAXi117F+lrcR8/94pvBh0njXkceTIvPtqwdot7pVH04hdYWqbQFn\n8MCDOFZbNN4igO2eNB+QAZMr2nTZGsfiNlsLu92oP2ivUyTzQt0ThdZlUBZG\n4VHDRp3K3NPOzncKE9d/leGL/Q7Scy5Mwk8GUeTCOLc6ymuhSCuoggpHdnR/\n1x8dHDvjs71XEl5NvP1wognbWX3+TxSB0Pk5aBoSpyj4mYylpy6RmPbFtk9k\nsXYzQnaJ0o5qMXLpDqXDnfg0xAz5sGj++Bha8q1DkZzShMJ9p1OMlEzdGqyw\nFP5S8tO9FwN5eQoc8SZL3NQMql8DcTEE0tv2vM2u0G0R19+8SmMDi59G4qYo\ntr0inJN13KNp1xnuS0QI/FT4pwgeghVpYOAAJ1lkWEkWUV+GZ8XVTdReCk5u\nAUScEPpNqqz7KKgmB5TiDE+dqFVVSTSLKD3SaKkdVvZgM/eIgwifQHe7qGUJ\nIpmzz79Xy44QqpXUjGmTOBtnJy+LvQEH3if8wJIuTMuerPwS76kq0gp4iQO9\nyrbLbE1GXYfq/+bRKi5YtdEPwmoM4/qVqFglZPzpUL46mfS+M+gloTgzh1NV\nedz41SypDkW0ZD2ACrztqb/e/PfJJTWlcBWpDnVKmcEhqc1QT4znfhFi7g62\nl5ic\r\n=7MPV\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"a3d3f698752d794d6b77fb0fcd24fea54991a0b9","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.7_1525828123889_0.0093137814758959","host":"s3://npm-registry-packages"}},"1.4.8":{"name":"tc-tool","version":"1.4.8","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.8","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"638cd340d3ea08128ff9860becbd3c926393e512","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.8.tgz","fileCount":27,"integrity":"sha512-3K+PmbfX21SykJzR/FyCwTiFgDKePSzcGcJIJ5tXIPtZ+8nUUGsgAMtHS8doj22ti1Bpty1b6NhjFd83nDNiyQ==","signatures":[{"sig":"MEQCICxAgIpkmeMkQ+NGWt6ZTA92NRVio7IV2VlQQ62sS6QMAiAsVHjSbB9ENcPbO1s8ylT5ahbNJwXem5n08bUVGnHcjQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58927,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8pFtCRA9TVsSAnZWagAATusP/0bnSGNcK2wAQZ3qjIBq\ntFduaxLX8RwbD6CGgMq2a7OzqHw2NoxSbpJqVA0j978rNB2o0rbOem1wdxJe\n9OazMOfMXvxVhnxpFP9IwCPtmXWJyaym/qDdJpx9fuj27F9ONwzs4IC1IoE4\nUeqsZREUXC0eqxMciOVp7OnD0hXDeFkpiGby1LqO4NMsb4/loKm/E5XJC5qe\nIVtvTqPitBwlpN18pyGTA1zRBgqdydx33nHRXAelkfDpbC+wJdm4fVJCDmeM\n7MAGBYMxBjErViPRPe/MvhryeYZT6Rs+7bmjjt/V01Y9fnMBUI41MVyxodY0\ndxyom1VMrf5P4zUmFkA5FdWZmHCxnhei2cR0c1okho8LnPT8Z0kzWAVHHfDt\nIPeI7bN3Pb3F31hMH3cYv3VqSpfYcwcjOPk8IsUIoUGJqsbvKNbIhw5PiylG\nuZ/cqSova3PdwPDlwaJbaPPKANofmc09GVdBE77oGMwVtMjqdK/KlHszb05k\nZmA/ENeG/pAHuG/D3Yywqvxmg+oigJSKbqz8dqB7oVcdRx/bzKTV1OoF2aLL\nzHJRf8lKAZrmkVB7MiAPgvDZ/ZIkL7Yp1mXnguCNZZTXCtPkdj8IXMbt3vEE\nfpzf0fT7dEFFYnDxquTHW/C2zpxYUCJtbBt0pfRTxw/jpOC22tXU2f+g0o70\nY5Zk\r\n=ckdb\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"69a7770098c388cccdad17d80ed78aa2fbc7c497","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.7.1","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.6.0","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.8_1525846380972_0.7420356316520424","host":"s3://npm-registry-packages"}},"1.4.9":{"name":"tc-tool","version":"1.4.9","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.9","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"af654478bdc8278eccc2b49572cd45999b77160e","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.9.tgz","fileCount":27,"integrity":"sha512-je76zIBJqHiJY+6pHX42Pqksv1Yta095lpwCRW3811HXxAOE2Rr/jDA6JDbmSYoxYYZ3zL7L9IdwnjXs9ERdqQ==","signatures":[{"sig":"MEQCIANXR1aMF7tE2QrKwVG6Pl7GNiYEnpB5g53WZULIBQBsAiAgRzlPsNfoCaBya3ayvx087teDbJPXlGnNo/iBOUQVeQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62380,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8pU5CRA9TVsSAnZWagAAZsEQAKCgpoEs1J0XX6pYZUCu\nSt1IoCXSgDp9xFXDELxFsJAr5fDlL1JZRdOiS/Ua0dX/XykLd79IAgZF2IuC\nNxS38aSXVoMPbWvYisdCjLZ3qT+JX7hE+GlolavJhRGGWVAwMPeFm+lqQNt6\nyjwy7YXG7y4hs293kA2E+2uhRk6HF9+MDa55iI151ln4VhmHBLmHqP0tJku8\nBBKb0S9YqrYOYfZZcxgYDkxy742SaV71RQ0hYIRgPFCKjzZcGBMRLFA3LQGW\nJoG7jjbVlMUOyiMuW2Xur2nr5YmOq9N3+oMEW/b6gNEHi5TRqVx0OGaBVvHu\n58ccPOAr0UjS3pJ+1jfMIFBZNyVewYgQRvQa4Eyz5WjE2qPvhbi4GLP+tYCn\nM0vUEYAnjdPd/cnFk+hk0aRwR+cno5oJ3InPhgChvxuyZZYivcuPNCkwIgSn\nrP7n+0JXmLvzyu3myAz3zH9MAy6xIEo7+2KwkEDJNDETRsrKSRuzqOdw7HLD\npkiCX1Ml63Fq8cnYkOJzxPR59byTl8QeHTh8PtCQ0heC11lpe2DJyJ5xzvp8\ncBj82scQfiUu0HkPhgEgdQ7mTm3O4HGidPnDm9LCNtqzizb0enpbJcYlBDvf\nj9j7vy4MWwDzESsNXfJ2c395O+NuJb0ae/rU2dFt9T5ZxxmjthjosBdlcEl1\nZ4M9\r\n=LymC\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"32ba716e2683227c5d426c69f6c42932549e9431","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.7.1","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.6.0","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.9_1525847353156_0.37098154394456206","host":"s3://npm-registry-packages"}},"1.4.10":{"name":"tc-tool","version":"1.4.10","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.10","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"9da9b710d1f8885fa7f2fe940f886ea36e489ee6","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.10.tgz","fileCount":29,"integrity":"sha512-GO1Hk1qRFTiJ8N1ZBFmp9Zehy+aOk1K60oh05VnOQQ1fKkIY14GRjUmZYS8+llxf/PXxK2ibn52+q28N4F35ow==","signatures":[{"sig":"MEYCIQCTWchCVG5F5C4Zg+aaD4qry3R7BAiOs8k+0ilKEcoiYQIhAMaXKgHnkvoXW4y2ZkeO6OIRAvbDklBRvk9T5bjr2pUC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":117263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa80XyCRA9TVsSAnZWagAAKuAP+gK5+NoihUIMO77JobT6\n2qG7HJqeOdTyL38yd7QPznlJrAcFnQKzvI7irM1HmuC4pSXgZ6bWUiu53lUd\nW3SceAR6n+rKF2T7e4FL10n5oh2Eajmy7vgOGZsODLyUbJt0nX9buBCJl5/9\nZ2A3EXwmfrB+1EfzPh9KyxUwVzgoVDA78o5KPWMSF9CASFIxGbBKN/I2SjRJ\n+g9ZZwz+BDIR8k+9Y3Ub5PsoTk2pWiSw0NaledXSDO/NtzwAcfQCWjp5ZYHd\nB4jVBPx4ZnJB3L+Octt57yI7ojbE7pywVZvG09WOYgaGpd+XbmCTIOvItyYu\ni78G13hPhyRsa6EIC8aG9OUbX2f5S/OoTCfiq2viisvvH/LGdlyLuNSoO8JG\nzNT5OtoQvc00xKfGTQelVnTuJKeKRYICCHOG2V5BSgfrb2KXHaC/FDPIh4et\n/boDYBfDnaCRr5PTag/+XeSeOW875AQXYRKf217Goy/CaI4+FER5cmvy1X/Z\n25HnzbXbDaHKfrrPH+C9sfGSvdkONjHQzYNWDhJHAce1Zyv4H8SfhmHwsBda\nBK/KG4bD7HwrNBh13ECDVnrLpTDh2oSdZBJIsOF7matrPc+8x/2DPwP9GPB/\n+6iGZeoiLtFEv/tEQ0m/1IuMYc0xAnOxj9ExZkFRVntfl3axr4ZzVgITbjBl\n6Jj1\r\n=EvOf\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"d1d092ba00237232109b0afff58ddca44e56e322","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.10_1525892593830_0.8688751005218682","host":"s3://npm-registry-packages"}},"1.4.11":{"name":"tc-tool","version":"1.4.11","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.11","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"213f6cb3f19c7f6abb8bf35d7b90427d20413206","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.11.tgz","fileCount":29,"integrity":"sha512-kj6vHLLJJMusf4UaFbMQve7idRItkD9W58NoxuxHvCY54MKlC/6JM/0mYVga803Q4mBo4lQye1XmzN3iA1NxEw==","signatures":[{"sig":"MEYCIQD/u1YeB8O3087F2769zaZQc5+qv6L61Gm7eSnFzDl/pQIhAL42lE120PMLhU7NBbUEeRP4d6PFAW1PFwFclwjoCfPP","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":117834,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa80npCRA9TVsSAnZWagAAm1sP/2VwrzxnrJwskq4+QeRa\no3qfYd9rnyg7Dzdy0dD2ks7j7Am1xiIDVyZ14quTmwzoF9lUL5x9Tg5vAWK9\nYSGnke6Pmxa6XOd5wJxOiz3B6FIx+fL7iufBTxK8jHpSumLjA2BEN+YQTcV4\nkpTtRYrqIYD2RjzQ+3JwThiMmpuw0l67I0TOHSu4rbKm+3vDWnQVHy1aizpW\n4KWfwEX/YxR3H4et7LsAZoWxAp663Sun7tQ1S+FjOqBpUGn4/bO3Zglbl9f8\ndPX9iIlphg046L7qOLA9j4TXMKiNOSVxpaNaDL15mEcf9iAY2kh9xchCWq2n\nHNUUJnQRx2/cLSqk37LCyUAdOPpr6AWsBaiKbD46t8iBloYEDdujuSXBvEIB\nfp2Itmbcye2PxOIRxn4mSqBGEECkdvlD0edUU3I/SSwSaBixnXFBDB+OvNgu\nZyKhPEqVAnwv4GUe1HEGIF0ZLjfuxB+nt1M2QbM4WzEU8eRqM0X15MMT9hXH\noDsGKKWMUp3LbgBLgda2tvmtcdK0RsA4VymZAQqVI9p0P18q/OyvRDLopQ4H\nDjmO56uC6vYrM4cFjQqdksrb+YI5uiIgtnGfo8dQIq2YJEi7Uca38zhRItiH\n1xVFX7jxU4Ksyvc+7fbfQ6L3/wSrF/+zCniBDoqlD7uC7syRPGB6q1FqNflj\n+V30\r\n=Gi6y\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"be8fe7155e85c065164dfb6c323c5b61bb9c879e","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.11_1525893609406_0.8398255596258104","host":"s3://npm-registry-packages"}},"1.4.12":{"name":"tc-tool","version":"1.4.12","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.12","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"5e59056c49f226db83abea38abe3f7b2fd1f4c63","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.12.tgz","fileCount":30,"integrity":"sha512-BZPtJmxxyjUT6/5YPvONGlkcyQxsx5C9yytxcnZRx7V5geKOYPKRqUAQAvdBj/goE3QWvIBFw7/rcy3HNumVJQ==","signatures":[{"sig":"MEUCIEC1dOf97HNCAPRW6j/DNR/Ipz9pG/S8nEc210hD6XdPAiEAikCIJmk/YDDpSy4ZAjNKM6/cc4G7UZr+xP4CIqlrtFw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":118116,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa81N9CRA9TVsSAnZWagAALbIP/2zlN6x9NTIyDkl2/jmu\nMU3c3J3iX9SZjRTtYibYMqhT7E5erEV1ZlorGcElA+QYljDU/Z3yBONsY+PT\nNPcUrfWhcy77tFnue/b+6j3CpzfpUXpqn7zHZGw8L7GrsbbqiEIaBlZa+ZBx\n5kVHx1szDELWu19OBV60Ra2onsXzw5AvecxXxYasan0vW/i+htAeq4OrdZx8\n2xu6kJbECJKv/Uaj3giz116ZcsxWRKLJw4L4zBw0+pkVaPovXjxhwssvjFKI\nTFbWdzbj+fIPFe3ssEoByz/q3QkTIgTl/DDXypONipOughLQP6fzt6PLKi37\na3GfOzQi0DI/+/EykT0GIS7yPY4JbToEdwzvft1jMN/po5ICJKyq/XlUgiyu\nofZgNzP24A4kDCla87DS7hr6fm/dmVKLq6dh6X14vyLlhilU7A/Cwsy9H9U4\nJm45JUcsREa9ItX/3iVBulEbADkscFQgr2EiaZNDYpG7fKUJDykk8n7H4nHw\nI8IRIQIEBfAd9XKch6zKq9/ghJwWh0D84pwbJaAZK3tChxgroXz9ASq7mYpk\nVcAzRCsknYThdOeTbD1LbycEx/QdgRsOSHgpsopuVSsv7I0yu8WAR5nAIAr8\n25/qbQztUE/MXLk8YOSo+lgoFesE7/beXb5kVlrtOUn/pW+QnlYDdibqwFhJ\ndG0M\r\n=M2Tg\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"0da97a047f8de4571929e115f9f3ef6157a3d5b5","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.12_1525896061157_0.9889027490941151","host":"s3://npm-registry-packages"}},"1.4.13":{"name":"tc-tool","version":"1.4.13","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.13","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"7e6cd87e0fb31bd12aea27c9cc59e5846d1f0140","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.13.tgz","fileCount":30,"integrity":"sha512-5476dNemTnqwBzQk7paGidsXmf0CRhm7bS4Weme7G7Uda4vDDs3YTxZnMp36F7YJly7uIL1OM4HxlcuHeK+utQ==","signatures":[{"sig":"MEUCIQDIeTi4GyTRKTZ6zdJgcaaE5pTMqnxyexA7vdifLmkuUQIgW6r2cbHrJqWJ7gqRGFYx/kGzIoFTTDl/sAkoVdURsq0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":115674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa81zTCRA9TVsSAnZWagAAiNQQAJTcvR0U2NdrpGkwLI2i\nmb0GVfmwcbqY6YPd/eH02FKHOSAo7nF8xYb5a4nPa6+cyRryF98fxMHnJmta\n/fTESxdQbam+CHqIkQwCPAg6cNdmaNQMf9PXWT0Xoj2g569dxtWEseLOAmFY\n/H/zMhDHQQYZjscAgpaMoisaCYRLSNiterCh9YbzIRtabBeBBtO4KGRiJQ3N\nwn7EiK6FYxNuGbaw7nxzudfAFnFu/NWl0uFyv2oCGOXKulwY+oECQ2s/fx7U\nhvVMQcGsCt5EBk/co5G+RXEb4pWciYdW/MX0kknIKSudvwgA2JR0LiA9O/tf\nEx2LFnw0Y+/PDDvZ1AxCEiX/Pjd2Uk4kT4BnPxKkWy4HNM4OFmGdoBvM9Z9j\nR2fr3BQn+p23jHbUB9R3S7hxbYPdXaFisNzt0ZBw9gh75gd/7eodK53KcgXY\nx+OImMQse1vlHssMSCFxmBSNbx2FjMbLiaTgq1iLPdY3os/Vm9f+t189C+C2\nn9JtL7t2I1Ska/PD24XO7EtURbK9ZvcR0ovSRVMH9dOYn4yCa/1Bwm7rTWCW\nalaMZdVLJyMxl5s2xKQDe7VqvKKNWTx64smKRaK+EXuCEzI5BVfFegFFxbhA\nTGck9rmY6Mlm5Y6cNhO1HVM+HTJP2Nz/Nlnq4aBK2/OEI1jFMZW55to7coLq\nTRuX\r\n=qMUt\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"54dcd0e3b1b04758d98c1ff9f1b010f52b244439","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.13_1525898450716_0.4174366882200715","host":"s3://npm-registry-packages"}},"1.4.14":{"name":"tc-tool","version":"1.4.14","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.14","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"989b37b144c1ba62d0038a996b0b4556255ae738","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.14.tgz","fileCount":31,"integrity":"sha512-C84v97dfjDVFHUkxF1/Em2CsCc24bioKHXinaAofSn0ZChnSxta5Aa71aT9kAnX3k5Ykz2tZGjL3vNMI5MDmVQ==","signatures":[{"sig":"MEYCIQCnWktVXo+EB8LsKWluposjk/8Ra0dXsFFWGqBAXP6k5wIhAOcOQjQ0uMuUH7Zw0GemBQK41huKwlV5ytsDA9INwGq8","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":123463,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa83AgCRA9TVsSAnZWagAARgoP+weAKkdsvKTqDxw1he/V\nDb4e1fm3SiKG+KY/bFNL9uvBYegIdYHvd3M2VU3H07r1rprWCZDp4qige6RP\n9zY8DHYl4pnWGmlE7TSMv9dppHUNRMjsS/NNrRp4+SVUSkL9yt9ADYj2KGhz\njHRUWLddsn1kr7zc4ieNWPGeY2TKxisN+Ysag7IKXpGC3BpHJsHRHK5WBu3r\nakHUHZHNLZiJEus9F0PHnL9iSYEym1UDZXYuJfIkS5LfV5za4E8ZaQS7DZJe\nAWlaismWzL55EBXhBizw99wF5TMwRqyoe5eZtUHCMPkAyKSaRrLmyiL8d4NC\nYJ+o+xxblPPcfq5Y7Abo59JAyH/mFHsfhQB/H6k9lL2jmX7wMKA07Vjunebw\n2USuDXf3ur5AZa6CxhGR7bY4sQxOlD2jcGJ7HDrkF3ro6g5FIxI3WOGhZBnG\nj9ik0M8cOLZjBnnJ/ceO2czL6vqGQvJMvnZiXfnwBBqJDCsfZx2jxMcIX9FJ\nGp9wulhYu4vl/CsaL9nnV/7CDaywvjoivfUdse0PTvI/XsDNVO4CTcVKRrzL\njDWVotOUWgxeqzXu1hGotLqSfl7gERv9lljAFqwMDaRCgSvivp0Aufl+poYt\nU0GECF3vodvheSt5yYxM06/XN7d3NYx2o3F/lnYEcWdl7Z/CUFg1xh+c769D\nvI1k\r\n=jDRP\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"327b8ba5926c63e1067a89da4ddf285eaa4a3b6d","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.14_1525903391479_0.1566946227764261","host":"s3://npm-registry-packages"}},"1.4.15":{"name":"tc-tool","version":"1.4.15","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.15","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"c3417a1f03d645f6c12faef836d1e1e4f0735cd7","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.15.tgz","fileCount":31,"integrity":"sha512-VgRoA0Tfbg0O/bPAgF0pYuNMEyziCpzp2lcwHGfXsGWZUnYhmeN4d3qH3F2Y5b0ns0vQap8lY1qNVOAHngwu5w==","signatures":[{"sig":"MEQCIC5FFBs7WnhC/79m+px4VToUGXAeOCiydYpsid8VqDyGAiApBOJLHzIupymweDXSfsrqms2yXjz6U3lThYVtee7n8Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":123175,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa83GCCRA9TVsSAnZWagAAf7oP/j1Equa8wisjp4FaZUp/\n537pP7ME8bHa0j+vhUjaOtCY7DWtqHp9+WToicJS0bRmsC9Xmg0gyH2U9Tvb\nh8cGUCmVroklc+R4+df+P/dSfYt+TQdbTFs3qfftw1pMH/43hOnfPYshLtIJ\nbw8q5mi+nc/bDxH4D9wZZ0lNIz+zjI5FK9rGmZurEnk14Kq8LnISIixg7Kli\niTzQ/EbR621e3QVtnWoUb3Lbm8BDsNoC10aHwrwAW+NXy5HanYZqphhDzupg\n5W4vk5KIdeUJmJT0dPxe4qRa+G6Gv2Lko9vW7GbYrGiB05Btf2evim4zagFt\naLwhHDQ0ee8w9tYyFaLV5Xx9xBcSuF7+2L0FlHlVr+Mx0HLJ4z2dy0u4FIUY\nSb2T/34FDqeojA93HIHZZBxp8RTfHwt8AOVrrGFPQYD0AcH7ko6U/RYpce8F\nF4OdmFA+RwtwahWoSKgAXcc3FIzlSe1HSytOnKMWJ/ahGB5PPLEfjsAzvG3s\nlI7a34wbCGZU8n46kQOAnDPOF1CnYINOjRMgUMfR8+iPnaqoXEFdq5UeYbr5\nSTKw5TXzgdGAp9ixF/E37WFzIa5WubAEYwa43BxSYDnIEarPpI5wvamsCrPJ\nLrJVYdlkxnQl9M4k8TP+oAjY0MYl5pwRq1TZokfrXYiM/KzZsAxZWr+df9L+\nC5oT\r\n=Vxct\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"43aa7e7b0cf1f855d5e788697068c3d44d5b14da","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.15_1525903746296_0.5986196861817261","host":"s3://npm-registry-packages"}},"1.4.16":{"name":"tc-tool","version":"1.4.16","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.4.16","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"b182b78e3fd4cad69383439b682d98dee77fa42c","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.4.16.tgz","fileCount":31,"integrity":"sha512-QIbZsYHgDAnzbvqP16ogd3ChVeK4bTbF7Iyl5ABMEEYlk1g8QBFzwfia+9BrQOE2JgYi1NGACX25eNHf/938fQ==","signatures":[{"sig":"MEUCIQCMa5hsqiCFUQliukqWkFN27gHQl2LILa5IiMteQNpl2gIgFEEaLFuZJPDxTfsTYaZi/9hiKHqv3pQ4y361U6UWqXk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":123175,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa83IaCRA9TVsSAnZWagAAENsP/i45gKrhfMu6a09l/8go\nz59YboF9I2XBxnxa33AucmKqErz8aVOMaPMHtZA4905aBEWdwIs8oNYNUKRV\nST8BE2LQ09oBhuytXxeAp0TlpTpe6mI9Sekok8W5FYEauRZHZq6f1mBuarJw\naj6eJDqIHS79OrRZkL7DOSgxIOfEh9kjOpQQouknltfRfgNJCPMSJhA/wrR2\ndjlP9pYbMelisU03HmfOroV2mS41TGbJpPCQVVIALYM5aEeId//9/h8euIuV\n0to3DB1IDBf13Mipf+9wrbW27ltlP2TICdT9dljcHZSBahqN185mwGyai90S\nzs2Td8dTcXBdRxaiVadt9wg4BidY6HR83uYGpnKcxJ4iL5CqeEp21Og9yy6a\nLgR2kJjCEXOwirC/+a4776Q7z7kBjacjk6KLtWEcgta7x7neDapvzoT0YAI0\n/UVZb88NnsVG4YYUizaVdvWhbqI9B0jnBlnpEF+v7H4cP2ckGcrSm0dr5OZI\niW8EqfVMjqEUR4BSMBOh346VMo33m4JM5SjIOpVxIFTZugLWJsvRQCT8I0bI\nF2fy4C4O9AVN6KQE9Emr6TPCexjorsFOd2O87UVIfFHJR1F6CzDY18mjFQZg\n/IcuYtb8UJMT6t+b970bwfSU3Sq6YRHT0OV7DhCspuWE6kO55NlvqVhqWXdc\n4Gp6\r\n=Gdh/\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html)\nthat injects some sugar into your tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n## Usage\n\nIn your tool's index file simply connect the exported component.\nAdding a directory from which to load locale is optional but encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/)\nand named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nconst NAMESPACE = 'awesomeTool';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nexport default {\n  name: NAMESPACE,\n  container: connectTool(LOCALE_DIR)(Container)\n};\n```\n\nThen in your component you'll have access to some awesome tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE** when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first use the system locale as a fallback or else English.\n\n## Injecting a Tool Reducer\n\nIf you would like to utilize redux in your tool you can supply a reducer as the second argument\nto `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport reducer from './reducers';\n...\nconnectTool(LOCALE_DIR, reducer)(Container)\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\n...\n\nclass Container extends React.Component {\n  render() {\n    const {myValue} =this.props;\n    ...\n  }\n}\n\nconst mapStateToProps = (state) => {\n  myValue: state.tool.myKey\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n## Applying Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can inject it the same way you do your reducer.\n\n```js\n// index.js\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\nconst LOCALE_DIR = path.join(__dirname, './locale');\n\nconst myMiddlewares = [createLogicMiddleware()];\nconnectTool(LOCALE_DIR, reducer, myMiddlewares)(Container);\n```\n\n## Features\n\n* **state** - Adds a scoped redux store to the component.\n* **localization** - Loads the tool locale and provides a translate tool to the component.\n* **error boundary** - A semi-user-friendly error screen is displayed if an error occurs. This allows users to navigate to a safe part of the app.\n","gitHead":"43aa7e7b0cf1f855d5e788697068c3d44d5b14da","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.4.16_1525903898557_0.3438215051410711","host":"s3://npm-registry-packages"}},"1.5.0":{"name":"tc-tool","version":"1.5.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.5.0","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"702df329021b18ce67159f124dfef51d2620ec58","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.5.0.tgz","fileCount":63,"integrity":"sha512-jRri914xgY5l/OFyVv8DjTu2om5YyCGZmFswkG8i130TPjC+11Fl5D2VOziAR7gQHkmwf/4swDBPeyxITt4BQA==","signatures":[{"sig":"MEUCIDUaNDNLD4tR6oTVNc5H+07sm3sX0E8GZb4ytqv3Hq/3AiEAv08jlD+9XngwqKW35qwMBKl1aYWxnzjwmjLhtqO82QQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":176738,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa9OSuCRA9TVsSAnZWagAARxcP/A+1tGhM8JFoDSDPTpwV\n7g1salrw84XOV9JVQ6qeIauL6o7YKGGTOsAGUZEQD6ixKH0AE3kr7m2aqPL+\nP97UIGaROZRHr+jIFF/UkGa4V5XTx1/xrHv2IutqXM5l0XV0Ru0QFVH4enGk\nG86XxDXNWmt5GPv+P6nAmEKuo+yUnWbbirt6nS7haa10vu9+FqAj5aotwfcl\ngGHNsRLbz1dQPNVMgnqJAZBajnv5Kb3WlfH5rxIZX6w2e192RfyGCeTsN28H\neAFmE0CTvaBSmR21wXLho/fjdfc7gHwISXa4/UwCkLJYEBtOmxJl0B53xGJN\n5roud1o68stTLxi3ywGadCZDyuqEFcC91kpsWgLzvbmI9yH3gplGXjnS0U+D\n0oLBiLwRGvpmJllAZXGXS1Qe7QYsyo7AsMkAbOEumOkR5Arq7/ymWqvlRw/H\n771Py/wcqbK9/7op2tiRe3r/mBoZohmYesD+l2C1bGRG0FI9Q6NlnF6kO3pe\njug1YO/DkY9v/5m3c67Rr8AH3LJ0zntfbY4EXJRkdHMnvSa2DQ8xUClruv6J\nlhlC2o2lkrJ3gGpAA4E7S8Yy7HtxlfQltAuRgZhSoPuKF2R2KIHTYHd+dZBk\nkVqSPoot/JgP/FfzwsVLE/CILCz9DWXu9VC8o+9FPYKjpXMD0Ia9ZQTrPIaK\nLw6W\r\n=zjvp\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","gitHead":"c4d23f954d1683336f6eadcec64996ca5719f14d","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"5.8.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.5.0_1525998766265_0.9052533057133596","host":"s3://npm-registry-packages"}},"1.6.0":{"name":"tc-tool","version":"1.6.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.6.0","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"ed20487b379fd4d6bde69ea6eb80941243ffc086","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.6.0.tgz","fileCount":66,"integrity":"sha512-l4IIcOyE58lYbgZOYsw8PMsquMXKG21fNxA0nIcStqxoeg1FXvVLclE9dNKlGD2HNCnSm/40O9OOpEsH3KGjgA==","signatures":[{"sig":"MEUCIQDZR50quJewgR0BSzyAltaUjnBeNP1pU1SClhsf02m5nAIgOv+OPH1Jj3NBGqC1fBbH5lv4/LI39Zjn4sFYH+hH5Sw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":197751,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR7MQCRA9TVsSAnZWagAA68cP/iZypDjQqSicceI7HVO7\na6+PmeltMb32A4zdBhm+5Upimu08IUsIwim5HeO6vCXASVobJXr9v0QSzBoM\nFHFaTWSKJqyJUj2M/tr6tMNhM3aF32j0YKXj8ODXe+KOqAk2sZIXsYXmkHtt\nHHv5O3nqMSqKqUigBjwgAotqR+SLFKdocP9o8c+JrWviUDrhd+rFxTs6HFEx\nWqaePFqEbiAtWuJlR3qLjUr0stFLrQx30sgkS8df5eplV3X6CDEYumVfodRj\nbVjgmyHIyG4xxVVLcjr+7dd0nVB59BzKC4B+4TTDtCJJAWLAgGPWZQGBLvAk\nZlJFtw82AdjbFYoqbQZ6XrzHuZ812D4icC+1ONOoiOGo6sujobWHxi/LnMZy\nxuVRP5xXeHX6VGn0q+E/ZUCvNyEa9Yu93clE35+9Gcv9KfZSERg2plN27Mlg\ntIWbDbVUs53p9bfBOL5i0/A4j+ss3bUkU/AIbUPB2ZzuMJRQH79DcT8ionnN\na7lRTBh5NR1/qKnWmihPL+hgy41FUU1YsdvG1DFHJnFw10Q5jkwjJVwbsqGj\nHYfsX3oL5jXOxiOVnrT0yljTL+rMtZ891fxU9L1QqUVAP9KCHNy/ETViTvC2\n36GLR7Jz2u98j9kSoLfEJ1v6nPhZjIztWC0zndHvykqUDf1dtMrSvDpGeEpw\ns2N2\r\n=D67x\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.","gitHead":"689684918533d920f0560aba8089b057464aace5","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.1.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.3","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.6.0_1531425551933_0.1828550187144502","host":"s3://npm-registry-packages"}},"1.6.1":{"name":"tc-tool","version":"1.6.1","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.6.1","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"418ea3869f13fe2a7966e11a09284213b24269a1","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.6.1.tgz","fileCount":66,"integrity":"sha512-apClTXy+T6gUVHC6shDkS6H+ezq5Mnb4huPyrmj6ZD7zagIwLD+Djjd+rvPubeIy7aQFzA/VGNyT/sa1iSEiCw==","signatures":[{"sig":"MEUCICM/Ej9O9wUEAtqG6uRUZr1fI5lrElWBLUvz3WBMJPNBAiEAwyGRnhHdwK1WyGkNYGQoEup97Pw2IBbB/uMswxYUi2Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":199563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR7jKCRA9TVsSAnZWagAARhsP/33T92xnYJOqUfsSKtNx\nnDDfZ6Un1ENGAf+TJFpY516JXAHUZ8YCnC85EKzt+GRRRZLO+H8kmgI9Ue6S\nj4ph6qiReOGmCFmge98vhbFxsKmW3O+4D6AUIni7KvbGs0TmCGVQ0sFj0vk0\nmPbdvserTmUimG3ycUpNcuF8rXo6rl9i5+tnirjG9BXtSS3wJWqg7KKDONPy\n8+AJU74fdklti8y3TlASpH5bc+pWS8pCuFroeb/j4mvgPbAkpwTF7AMdneMF\nUNlFp/LRk04m4lpkCmSDqSp5EckOUuNwrmoJcVit3a7mQ4FNFC6JnUp7PbUA\nl4vnhKzQCjUdFBzV+Z/gP2Bo6ygWU/vmJ1oFxvBLwvPz0BEXLuN0W2BefXov\nWnyjYx2Z1pHnUjy7oc6C4iDbOJ+E8wp1Nx5t19htIISTB50bWBt7aj6+DWOH\nBqq2pjW1Yf2z6kxxIRTE2Wl+tdPD2XIwPNsLKDNFwvAx9Vn51d6KJ6eGjHLL\nNbfp2wR1WI1jg6STcc9m9JEyJfIdFtTF68DYSZl3BuOsffsvMv2LmJOYuuiY\nAu65Vo3uQCguR2Q5wQYiE4xwxPfrMmR7wfj42Y+0O6cYHm1qqGbiQkJ/3GcQ\nukxr01b9m0Xdyj9x5znJE7luWb9PzNX36vwIvrjkNeeIcGAa0BUWpFE599yE\nzO7F\r\n=ug7X\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.","gitHead":"1e7a8009b159294590588195f7333ae476bd5c57","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.1.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.3","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.6.1_1531427018027_0.8287273153209072","host":"s3://npm-registry-packages"}},"1.6.2":{"name":"tc-tool","version":"1.6.2","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.6.2","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"6b9edb283577ce1fb0cd86764fd7eb2938a88bdb","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.6.2.tgz","fileCount":66,"integrity":"sha512-SJPXJotT4N/JHTI3X7fv5ignJhm8H55Hqvxw5UNSZv6r1/Au8AU4umLHVg66m2jbmClP8cx8DKfjEtb11vyCDQ==","signatures":[{"sig":"MEUCIQDcr2FQd7neGPnLmekV7F63VA2IKC2Zj9DQrQN/DQEqaAIgeGRplIrrH0B707pdv6lYVWhXcGTQV+3Ti9w5YeSJqRk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":202383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbSTFECRA9TVsSAnZWagAALSwQAIzmTrfF1BVKFYLULnEe\n0mtCeewqk3di3iC6lBz2a2uQLeYugxzgAJ5O4Pi77hlVwjh5kxpK7sUqeQSy\nVPNQKB2c3f8CGmXYCGaUaIT3yUZ4RF+lI0s0xVwShClmmqyAzZZ77cow35xW\n6gCUcQqunwq7ZBhKhyw/mZevHYYLrJ7fwVK6GqtETQlh2eIlAQE23c1qH8gT\ndaOUVZwy60x/nz3ZQAwm9UN2CljpR8vdwnpN3GsW37OCzMNTxBEf1znycE1E\nQoJ7FKg6pxut1N6hA48KTK1vmfG0hzbmYGWpSoyzZD8hT6JKYcZqMltblaqo\n+Svm3EVv2LZzBWVYwk35Ee1If25Khmcco5Xo/Ht3RQCBOXoKXyNmrLpmGB2q\n2Q9N1UWaA7YQKEbD/aT3dDStj5gmpZ4G3pQkm5fcXAFV6qZDjDMnnWf3fJ4f\nqoBEJlj13zdtHAdLGwmCkMetllVrK474IXaxSJTCHw7VxdE3CAiKVljXxh2i\nRp0v88iF4dj9JlPPEiNpwf3jSRECKLAL6tQ3zJzQs1B8eAMiZ6AANaO0yRm6\nOCocqzienIZbf0ZhbuwsaV/V84sWJCjHw2+T0qRJ3eDvYQ7mfiyi0/owbY/E\nwqNiifg/FmviK+bU9EccBp1DhM+uodgwcG+2oGtSoJ7csO31vwwv0q7BzK2/\ndAXJ\r\n=CXX7\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.","gitHead":"7bdebddb2dfcd36e6bac535f6a0a28be67dd26dd","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.1.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.3","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.2.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.2.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.0.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.6.2_1531523396554_0.8510214287530518","host":"s3://npm-registry-packages"}},"1.6.3":{"name":"tc-tool","version":"1.6.3","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@1.6.3","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"8d8a51cc7f7f5bed0cbd369f84e522bbc87438ee","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-1.6.3.tgz","fileCount":66,"integrity":"sha512-8Wl/aG+MiVNY24jlOTRTDMLqm/VVvjd5tpqdzzC6mgtn030ylh0wQ0RDWbiWEiAn/GjBJTj1CHhIn+V98/+AbQ==","signatures":[{"sig":"MEYCIQDp4qr9ZOYZaLOvfewRR3beIB+Fnq0hPvHRpM6KW7AqbQIhAK2lRHtOxrWCWA8u18dsjFFMaSMbS+hnjntsg69qNS18","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":206977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTQZhCRA9TVsSAnZWagAATNUP/A9Wur3U0+sTdjhDQf7Z\nG/4X2wU0WgMUJdpOAuSqyGzn/P489aR1Lh2FS9Ob0yq1RXU/r6lmKhesLPyg\n40gya6mpA7DmoZ8xGtw3NmB+nW/kIg9HKWu2bPTmKGLC1DCicorUvsiCkdvs\nw6FTKFW1wwZgWMd2FGGH6rvrkQAmAJFwqQX1q7T3ia5zetGM2fHClbeJexH8\nSPTy09BTy5Nmo+eDtxDluW/K2ocEeDaO3Vve7YlLtiUlVb5OEAVUwXGNd8Kv\nhO2ItUs48ycYP9dSWx/yuvBSw3yn3Jhijd5MZ1ylueEPTFKueoXg7CyuGV78\nym/W2nFIQ2ySCrM1icCRss1+ZVorWYME+37v+PRh+pjQLXfxsdMd+otoIFnR\nMoGvK2E6ych8TKrWdg1jB4pvXKplQYTCknRQv7f9CR/RNYx3hyV0ZIQGheHM\nH8Ncafvx4OdMvenrMYAvAQMF20hpcu9q0piI4fcg32M0ZL7Pc/+AGLRlP4OM\nybWlZeD56090Gsq+FP4FGowcscSr490pS4FZu2wdh5PVYmbFVO58myI38G2f\nXhULE8MMu5CNi8g5jzNtaa+CaXzb/UuKMOwrqhf5/k/P7sG7G13PGbuo+IEN\nQNPYIQVPXXUDnjV9gzr47ud25fZNG4vN+OxjZ6BOZRrg1OV5SpkDr8qogyXQ\ndZ7S\r\n=fZZV\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.","gitHead":"134c3427c558e1dcb1df63e2b5fff23f24bec841","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.1.0","description":"A HOC that provides a tool interface with the tC core","directories":{},"_nodeVersion":"8.11.3","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.3.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.3.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_1.6.3_1531774561008_0.4854892923865013","host":"s3://npm-registry-packages"}},"2.0.0-rc.1":{"name":"tc-tool","version":"2.0.0-rc.1","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@2.0.0-rc.1","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"03d206a96ed29f4b345cce56d4921be0876a8f55","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-2.0.0-rc.1.tgz","fileCount":66,"integrity":"sha512-evOu/7yVRSpezmzeSbydCq5NhWObmqlCCronhBXSdu0JBtsQWZHN4PeSoQxB/tbSsL0lcPM6gLFl1+gP/TmPPg==","signatures":[{"sig":"MEUCIQD8Oi3a7kRCP3gEw9alXRlb1aqjwvqppGEJ2P97Cgv+NQIgGCObFxnvMch31rcRe0iBazAwx3gH7c1yucy5K6ezcys=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":213080,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbktF1CRA9TVsSAnZWagAANH8QAIRB+xiDlt/gNek4SfYO\nYhxqfv4Gq/Ur8WyhWGk6YTcTTV/yolrpxZV+j1v01nYcqNSED7gFFmXbT+CX\ncYkfy672gEXmUzJdkmzW3pts0YUKZnX8kd3n3jboFogvFfK9g4JuNt67IIfc\n78Sj5Hq3FzQKIowOZ5CJXDE9LoxM7RV6JyBVtSs9U/5zBDlL1LAD/2aP1Bwx\n4BpqB5OtqMGk8MMcxI7zoGbgRmCAZZV4KvPlOiIjxWCz6fF/+BUdgyqV5xxq\n02FN9UnRRssoAYC6WI3xJRITUhl8xr3PArfVnWeMZ/xPNd8+L8f5fPalVoz9\ndnKj6iyENICHS29nzm1H/xPgkQU7Z46puQwncL6bo4959k/+SMpoEyKTazYb\no3beQMCCu+1PTPqWr6uhi3EDEzJCWK9WO0LstfDMMhB4LhffJWAle4FhCJoc\nlvhYG6AhuoYLbXj3yD/fQhFDK4DEZEwoDjwQmSwlwQ/a2m+45sdC8BoQD8ky\nl9/blpDsEOv+wk4ExovusPJ2p3CwIu83068a70I80i6Pl3+3HWs7+BpLkiqX\n6xZ52gxVfMZtuJa1Ug6HGh5rieGV0qwaZQW9m5ZdEkJ5BVyxL5I1oMu8AkeY\ncs2bCKVgkpdyyBxBW00IgGQpenQgEjBlcsT4pJSTq3HvPDnrXsMpq32GeVjd\n571H\r\n=EAE9\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.","gitHead":"ea2f91a568350bf50611219976d6c82237bcb9c4","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"if [ ! -d './dist/' ]; then npm run build; fi","prebuild":"rm -rf dist","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.4.1","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.11.4","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.0","react":"^16.3.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.3.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_2.0.0-rc.1_1536348532834_0.1326715557428182","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"tc-tool","version":"2.0.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@2.0.0","maintainers":[{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"ab375874783cefa45f740cde0d8c9963268dedf9","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-2.0.0.tgz","fileCount":66,"integrity":"sha512-X/Zn1zoR6+zxZljex74NG64mcT5D3jHZyE+bHlkDKMCXW7z0BEwnRPXh4dXetJNskOatMzs9Uj1fMJQXt/CUnQ==","signatures":[{"sig":"MEYCIQDOvpMnKGfEwUXvWVf8HMYmEFo92tktDhTmeUqmPlKITAIhAPZuJT2dl6cf7oYg8hK51/7nc8h8MYUJQ6sn+s+vH7hS","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":212420,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb01NmCRA9TVsSAnZWagAA8qUP/R4lWUjvgLMoBbS9P0GY\nIqE98GnOjqqEmFW0sfV4czwyG36sBWWUp122rvSWX6KBRPhGZL6ucxZ0vS3r\nXag1CZ0o3jSJDBXDJXZLtJYpDVDDXBf02q3jtLNuwD9wC3NRLsfjiXidrMhG\nTNIe9tWFb4Zw4jANjn+L1D0UK5ZvrUR+P0qAH8SB+z81tmppue7UHS+L8/JK\naVnyYzuyULrOoDL1OjhI4Kg4juxi4nPvCFpSP2ucwK0q9bu9eTzn3ixm/kR4\nulgRknXrrJPlGkO3ZjpxRvzjO8VWPqomVHq/nVWaixqBanIbZ+4BBIAO2Mmv\nry1w40Ka0dxyvCwwiAbLfWMOaDdkmaL9QZCh8TVJP8ApMZN+jozP5HpWPAyy\nM9x2Hpe24XgJRDKY2paAc5RX8oLB63btUwPdoOOffsGg0Om8pCt6Ag7Nn2E6\nD5jYZBkV7/kS++Gv5sId6zdngQ7ZEfi1qbJOWwXu4PjeQQ0bLcN76nXHtO0p\nn1gyQjRYcMuG3ccWxNO1gzS/4OVPs5Dspb/ISG+bHl1VC3EzlFhgYRUUYVNM\nnJYZXaA3IQoSPp1Hh2wEO5nH7n8iWUFhegAhyXlHvzWg51B0K5OQaI3MmAv1\nFMUbGY46QFfXNGaCp+JtAqs9S/DbLTaYoAuAVljjDjgj9TkN1Yu0F4DmBuFn\ng7kl\r\n=1lkM\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","gitHead":"8506a60678c55fa204e1a7c34809d7343cae97aa","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"if [ ! -d './dist/' ]; then npm run build; fi","prebuild":"rm -rf dist","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.4.1","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.12.0","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.4.0","react":"^16.3.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.3.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_2.0.0_1540576101683_0.5305947602138563","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"tc-tool","version":"2.1.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@2.1.0","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"4f27be05ada5c924b205ff5732c66409dfcf540c","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-2.1.0.tgz","fileCount":64,"integrity":"sha512-SswcpHY3k14mhF9bczcQQ2fNwaXXIROFAF7o7UwAKeTEfqFQm4snXBxCXT2t6IdazCSHzurq2+2YGGXCKhK9Yg==","signatures":[{"sig":"MEYCIQDgz8NAR1vJ1eCLj3UxkD0LXsGiqWjrYJARz60IdqfiRwIhAMeMT4u8woTQ8SNC+o5x9cgc4uXcE+EXcU9yyqRvfcP3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":162341,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcNuSrCRA9TVsSAnZWagAA7YUP/AiHxce16QPbkh4UO2jf\n+FAjlBoSSo/PFPjnLoVlgNY8PLFIyk5pXXooC3omQUm5GQztXjiCViXK8Q5B\ndwSYSPft/93Jbt4apH2HXVtw3hkudqLCB2O5Rfbm2rbOrdhYnIsnanQOVNjm\nT3LD8ofXE4TS8MAx+dgAcF83hDR0rhI9em0MzGQ2uS/V0QJYBxJgwQr2C7Uj\nHOv1yGVjJPAG3Gp/IbxE4y3SPqXvY2gGaqQfr0PDBytfudiCT7z+1zl7UWFj\nTLt9WgKDgvpCVcoSs95jdJfLWEcy+L3ma50StABb/Ngv/ORNSG4JhrMQjPnx\nPDQoiVLE8HvwoBMk0gPJAnnhCZC+P87yzIbrjcKP4ZMQ3rZNDAwmeCzWQV3j\nQ4i7pup/7Vr+/aF7v5+JG6nzgwCYqmCKqRS56IxOefzf3++0NUUv/O747hdV\n0QyRmxSkY+eE3rAuJGKVxQ9RJY/mhtCxIDBdKMmttixECQuvpGCc0MQuko0b\nZCQfhKtJx2TiKwEvESaHeEXD9+MzWXU0rXnV5DBOinF3N0c8SG6mg3S2kcy0\ngLKzZ2SsyURgkn8s+r0oGNNRpihks0EIeculaAEF50KsaZ5qfu/jpnxQCUUt\novn8NhgTVOYutEjJMRSQexJGqNInSg+JKlrtC9MKiBpEA55re6Hu2TTPSSNr\nQdQJ\r\n=btBh\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","display":"library","gitHead":"9ed156f77b59c27da8ff46a2a7f283c2bc01cea2","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"if [ ! -d './dist/' ]; then npm run build; fi","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"neutrinog","email":"info@neutrinographics.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.4.1","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.15.0","dependencies":{"lodash":"^4.17.5","fs-extra":"^4.0.3","os-locale":"^2.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.5.3","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","react":"^16.3.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.3.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^8.2.2","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_2.1.0_1547101354753_0.7127804755348248","host":"s3://npm-registry-packages"}},"2.2.0":{"name":"tc-tool","version":"2.2.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@2.2.0","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"67466e8151ad6bafc1062744f4f67dc467bded14","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-2.2.0.tgz","fileCount":58,"integrity":"sha512-xuyB4PHDXhqQ0eXCNsJXoekjxvDXwqEJjEwz0ffK1j7rv12Bpx+BehXb4IDRl70CnhJgG4ocUrReeaA168KFiQ==","signatures":[{"sig":"MEUCIQD1sGxi0LzHPgBSqARists1GXuyGV+HBc7iUfs8bmJLWgIgKp7fyaaply6Cnm1S/dFOnDVBUPtRDqk/khowd9hWIOc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":136749,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ2G3CRA9TVsSAnZWagAAQJcP/iykV3KGdHn1yBO1YSig\nlScko1t4QRma+JMmLbst3KSH3aTQ8vC0CJ5bYdJgY2wLq9hoSWrE4HQOz6Mb\nqD5LugNrxo3CAJnCzJ3peWKL+7HcR2yXjp9gt+3s4FNERbEjNNXev46zRmal\njZS/fCjscng6KzSLoYFEKsJ1mwxTZY5PB+JDlFQMQChnMiN3tFHensZ4nm6S\nMsbWFPnsEDSa+dyAzvwnYIGpoSl3G+UKUTOGO58iQY3pBwpBzkdCpO9QBhfh\nDdMVfzPM2CV/40kP+8IqiWlIMQU2IFWdwdmzKiXHnkFobAMkl9S+K+5hEDMm\n6uTK1LEkDAUn/pY2QF/JZH/fhVahX3yY3QKVygSJHoYR+mHlN0pP9IaXMoyj\noR0p2e6zJbfp4dy2z/DtcA1g9Aj/L7Re/u1l6lNIUua7eNEX2/pnC6hpmJgw\nvrxujwkyQE+vv5E8JypWLT7XV1o4AdlncsQxTXL04T801UKcHoZnBqk7Y70c\nBoNv81Ci2eo6+v+xRT2jEprfSRnHqEA9yosLaVZA1qvdrBnGh5k++uovSnkS\n5S7rT1Qyb6q1MSzJQ6jJbYNYN8/ZAWcmt7JUYG2IrcUxRG4lo1L/EqI53CXx\nA4TXAG/uu7OxKYJMdxcrtXFLgUICGYhuwyAheJzxaruEU2yaGBRFYgpOSd+s\ndhV5\r\n=2uQH\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","display":"library","gitHead":"2c797d8fe9e51dbec344b50cc89089ed8198a6c4","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"macolon","email":"colonmanuel7@gmail.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.4.1","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.15.0","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","react":"^16.3.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.3.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_2.2.0_1564697014884_0.6167270704879375","host":"s3://npm-registry-packages"}},"2.2.1":{"name":"tc-tool","version":"2.2.1","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@2.2.1","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"91ea6c65e7bf0c72a20096dbf1b0dbcf201c7935","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-2.2.1.tgz","fileCount":59,"integrity":"sha512-Y2knZWPCfYURDr60tiItPnsRtU0kqRSROKS3LA4QCOvauHksqCja9WyMNAIVdbKx0vLHXOAFIb+ougztinsUjQ==","signatures":[{"sig":"MEUCIQCEB4Yqh/BsmdQ5oUk/iRiMM2uRWDwWL2l2USeFPUeVBwIgJlmTgnJXAWCymwjuJWtGLfbL2TzFXhV6yIJPNx0Z5DU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":143821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdlil5CRA9TVsSAnZWagAALkkP/3It0ZfX4jc6NrPnJfDA\nASS6s6kabpCc0VNX+rA80cvNqolHDsmpkel1L0K03iRtw7Hh74wMeDvVAoGl\nV7UaxzYLzl/b2X/VBWEG6lul5WJvkzGfTYpPVRkJ1a222qvsu9xUptBeN4g+\nC5Di1CNpkrCtWinHsfaPTO83QDW0Gld0l1etCDqsn+87OcvF2zIyIjn4lP8n\nkVk/SC+/8MfkSMKZuCU7B0Bu18jrtOwME3VTFsF4eV9DjsdyvQ4jtF//Vml8\nWN0OJtDYLn8vTeTN2MeIevKCJbB5RNpfXF+ldSDc/8ATemAVsOKpYJr9BdMC\n1hjYwrqBjH4kDLx9YMjcUMkLRQYFYM0VeY8NP609XrD6GpR+GIW61Jo+2Y2r\nnY6N7+225eh6jj6UU0la9UYX4BS49/PUO5lLEGsHo6z0JXFdhykdIdRHs+cW\nC6D8MaHRL1QzVWDJoPF+is9zWfKIMCF53NBQtBHerqU1Ouny6iyLbqJ6Mo9M\nlY/cDZIussfc/WlzlHYdZLWMBCjeBBICbES3nV6fWAtD0QFFJBJm4/1VnvgA\nqG/RABXqltumLohEu1ksYfZu0ALylpYoXLkCom4rWO/cJJHEdKKhvyU8H0C+\nAKWhPj400ucUUeiza/kWe2NO8U9828BDGjq79oQlnNWl6ziz+XOIOTgo8TmM\nBREI\r\n=c86R\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","display":"library","gitHead":"b7b6f562e9253794b1e90de8a4596750491c1411","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"royalsix","email":"jay.a.scottjr@biola.edu"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.4.1","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"10.15.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","react":"^16.3.0","redux":"^3.7.2","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.3.0","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^5.0.7","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_2.2.1_1570122104381_0.6741957937786716","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"tc-tool","version":"3.0.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@3.0.0","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"9e0e0e8ffafd70048324784fbedf837b6303e2ca","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-3.0.0.tgz","fileCount":59,"integrity":"sha512-+kulD8EJTXqqv8bDl5N5Xni0Ec14+2hCBCydd58M5rcaGjxmVaPnyV8C533HgSZh5/qFAzpNNdnrjKzCvj/okg==","signatures":[{"sig":"MEUCIQDR5eM10OeEXM6yo1srMr8S0LkHUSiAfzcCBoQRGe0wkwIgGK5CoWA0msRNEr9f6Q/FKxxfDnRkAyxpZtXl5CfCqBk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":143745,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdpL0XCRA9TVsSAnZWagAA5QoP/3mh43ImUudusc8n2q+g\n4CuH98xKc/YFwamNNx0L80SG5qHQcp/ieOScPqGwXNIEDpeQsVmE8TDEoC9+\nvpFNtNXRZTwfVlAdyu3zY9THkr4ZG0KzaDst1UfcYHxtLShgvlk0PAuEbG3h\n7A8g726JP+D6+Cc5AMLoeYSiqJIGhXBUbF9UGivIPtU8LkZTaYipHhZTAWOa\nvss1nhzNRhDPGqUo7JnXOmfafDanyIMQtn5r2W9S3PrIpGPqN7Eq9tXGvd0c\natgkjeCJ3VyZe/zYxxFH85jI9mWfOYI2xw16Tk+hpf0bWVtZI2WEVxRBXLIZ\nK+6wVjzHDYmPEU8SosA4ZJA6CreScsJ+jqURBp4RSBoLjXsoE8+7VR1jrxbd\ntUtOTEjGjwvG8bkq6STlMv+s91PMJ5B+exv4LiQHAGiB/i8+0Mjk6xulUMV+\nF4Kaid4bc1HDE/uFDWqturqQsjQpqRRWwf/vP97EoAd92/llLIV/sLqhx90m\ndJlzmuU6jvWFMqAhsxvgCp+au52UeMagSbpjB78pAxldG1POX+4f8d9a6yau\nzbTGcqWJEiOdWX7ODhsMwd7SUOt9QSM08lXpeNTQnYGn2ZlBHai7YMyfmeZf\nyaaT6ge/n+rbAuSf3RHunFS7MgKGYg7t5+J6xR7CCxXYdH5oXsTEp87XIXSv\nhv3J\r\n=RrMz\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","display":"library","gitHead":"9d97fc17316e834df5bc4b7bce73d62908a3966c","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"macolon","email":"colonmanuel7@gmail.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.9.0","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"10.16.3","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_3.0.0_1571077398541_0.051865947224947195","host":"s3://npm-registry-packages"}},"3.0.1":{"name":"tc-tool","version":"3.0.1","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@3.0.1","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"a7ebb8424ec4fd7e472b0428aec0a7435eaf0f30","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-3.0.1.tgz","fileCount":59,"integrity":"sha512-fqwAAOeRoBHjuJv90QMFU/c0LYyP8Zzxsa9EMuUrhzozS79Gp1AjMOx86b3KiiwEPZ4v654S/OrTFGoQyivffw==","signatures":[{"sig":"MEUCIEj0YaVCKotWA0s1bi/33RvT6KPv80PCp+Ea4oVYBJAbAiEA7Z5IyXqHbMn/8cUvwemtNyM/yyqHyiYEeYRRx8/i57s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":143482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdphKOCRA9TVsSAnZWagAAht8P/3QZrRum6Ndpuj3wnAi5\nMCZC8EPkzFcCNF0P+vmXZaGU7h2Uuu/DXdUD5Zf6GHIeqwQBR2q6tEgCkNRT\nle2F3DVM+0OmAqTpYaLgxQTDu6rtZkwNXwyKTPWHfF/h/8RQAPjihdF4jBvr\nv0+DmnLCdYe20Qt/RoBEF0sWIShmVbskX27eneqezY5/rqpCAM2Z/gBFXpva\n4nUSJPjggWTuijWNpV1qY5YfTigc7KY+FiVYKy4lCWYUk6nHl31lY7wCYxns\nXEBPKfRRf5PsBeCCm8yopkE1muxcpc2SgEJmNBv8CPZrOr+uiLkNTpRrG0yf\nfaQlkff4BFWKrSNWANdUj8vhs0LU6stWbYbMGc3kCYJxtTsL8HAGPqSMTyPX\nrD3LzaQGEoO3bJA4mX9VzH2nrt+OFA5WF9VvO0HObYWxJizH9sgLeM9Z0D0O\nX39/hf0TmYozKo5rZp4t7b026cgPWr8UzEP3+IWCQ8AOyJ2tziRv8zvXXA0z\nc0/pigiRn5d2Ma5TJKB5XNMaQFH2ycjSscPzD3yF63IuzP6YrEwJX4/DmffA\nfhnhotjoG3a0Z048lQIzGA2Phl3fCfdUl3NlFJytIyvtEnyz8LA/VMi4mqVA\n26d2Ym+QTBzIbzrihp9nSYS/s+amHT1NGEE8j1Oel4eaHZx/eM8uF52P0kGl\now/p\r\n=19Tg\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","display":"library","gitHead":"98a7ed2facda208d9feb479fed218bce0ee9cb02","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"macolon","email":"colonmanuel7@gmail.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.9.0","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"10.16.3","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_3.0.1_1571164813481_0.5336024066580609","host":"s3://npm-registry-packages"}},"3.0.2":{"name":"tc-tool","version":"3.0.2","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@3.0.2","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"17a202ac2073e7f8dcacefbb9f98294ebd2d65d5","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-3.0.2.tgz","fileCount":59,"integrity":"sha512-6VIyQdn7S1i1IaGX16zmn9k8Mr8zVDxvV0b/Mg1Xc33j4rykqt4FLe5NQ6Rwtdb4ACY2Yrk1G7KA1LP57z7g1A==","signatures":[{"sig":"MEQCIDjg/irBHPFpHutpt416SnxMmLG4+WPxKjKrhLLAsv9xAiACBwCYigc5i42niHUi6hOVBVtcqWLGnRGL3M5KWkMILw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":143658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrdWUCRA9TVsSAnZWagAA0cgQAKUeqR7VHBBFZ6z3o1ww\nIam+PvwL3pNc40v8+6tlRQGfi4uigu+T4L/jw30PttobQmtR9hoTTO/MPuR/\nXZsy5Ryw92dgJoT8fWhp9i4hDrXfIgyJaHSJ54cnrCe/yrOVUSeN3q15JS+S\nK8JMyVMAL0S8BsJsqCPGtleQONahnhD0muGhgrMkE4Khc03dMVqzxcYV8S95\nOVZTBi6pt+QAI0BRoWcFnsrieL/yvm8cVaoTdlC57NQ962QiM04R6NVOQ2kR\nGq7ZRUnsA05RmhQNcRTbpJ52tlNZ4dCSHymo+evnw7bRSR1BPEdD18dYeE6C\nV5vi9xbi2gIeEAfrHAcTljyl3Q3uOcZ+dh7FuOwxOAUsuyNk0tGv3wfizwCx\n3YhBxTVb9syYJajPGNeejLsIQ+b6yBO+KkRxEtMrhKYViXsq3LsrqKW/VEu+\nAk0GhkmAGLwC9TyqdqJEnMW34cRYqnugigLBOHD17LRgAj+BRcdMNwb8nv72\nQyxjS9bak9uKbZW5OCqoo0mmbx6fbsXmQLyzjEhkcPtABp5SvicELLJz9/on\nT+kKBBE8KA+pxLjcheoBBiHM6wlofyHjAaa6TGyJqqLXBaI/Kzp576KDZf9q\nzafoghKKXKDkd1/jn75N0uwd3p4CeHbj3x9VaW5Wjrs9Ty7i7cmeCOl4Iul1\n+kTc\r\n=33dk\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","display":"library","gitHead":"6a615c66850e44d48eced60ef8c77d1e5242c50c","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"macolon","email":"colonmanuel7@gmail.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.9.0","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"10.16.3","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_3.0.2_1571673491420_0.3426548548563657","host":"s3://npm-registry-packages"}},"3.0.3":{"name":"tc-tool","version":"3.0.3","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@3.0.3","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"1b563b46a5728d6be8334c790d1112797a23bfbf","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-3.0.3.tgz","fileCount":66,"integrity":"sha512-LFqgyC+Am0Kbg6o/aw0qRP5J01L2ch8wPSkakAyCU03ZwtO5KQLAld4gHGLMWsOy+Ad54dXuGcvQiOHnVfG7/g==","signatures":[{"sig":"MEUCIBH3UIJf70l+Cn+RpP1tPjnp/kbIFXxTokx/e4NhujxIAiEAhOZCWnqN31y8Zavql1eWCkDCSUHDZL2Vrlc8jkM+ktA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":157156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd2UPYCRA9TVsSAnZWagAA3DUP/3/7tWfg/A5eVHPBjGaY\nucOsKi8cH4TFG0KOjIvN2gFuShaVcyAplE0wO0mY/PD7PNBu9pgHsw+eht4B\n4DH9uUJ1R7QSE+sUXP1rE51UNFKzO8KGZLuTyCtOqDN1jQTp/sxWZxMdrvmo\nilVB/iZ/EF+14Huztyx3hAzxHjMg+EzYB/WCsTM30vfSK1xWmlBSxJJhaYr1\nil3UZu3qFoVsrHXy9Hm0ZqrpXBYHGmkXuBCBC7T6guq9xCEtmEJB87C2DAkx\nSzlZZ6KYOZ1omttf+BJqbNje8yJ6vuVP6lFkLMS+pa1UQ7tXvO4rtpE/v9q6\nr43mIszcXGEOGi0Wi9DT5HVzjNn2PFrWLE+3d2VuyokC/a73nnw6YHl/6HkM\n3Qoq9t4vwYu6nQqZ3BihvAUIn1ClHWgda4F2cx6L22lcABlLTEURQt2UXEIy\nLdEL5CXFSNyTAznpF4504sEmDVW6EnFlGisumLq0zbX9yoBDCrmrTdp9UwHF\nmDcipH0vvJFPJyaL5mJ3GF6qCq0Mft56VS8n6ktzgS+NCMtaIyOe+NHjr5DN\noinhnu1Qh/NNn1uukE3No7jK2AqgWYNkmagmP6OXsLen9sT2D2VxCfDG21bK\nJ0n6QQQOa+eokOfWJwmL/s3mJ1IFgVoeSIKiXKdZYlvwBJzQuVqjrSLGC8PT\nnm/Q\r\n=KaoV\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","display":"library","gitHead":"bc0995dfd581903ecabdc2636e0f2efbe65edf4f","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.4.1","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.16.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_3.0.3_1574519767964_0.23935087350248696","host":"s3://npm-registry-packages"}},"3.0.4-beta":{"name":"tc-tool","version":"3.0.4-beta","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@3.0.4-beta","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"5e0f488f8aed2173e8d6eeb335f42437c1c2504d","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-3.0.4-beta.tgz","fileCount":66,"integrity":"sha512-iYVzU8l8+xn/opBM+rgL4DqgDmmHJWJGF0WTt037qlP23xwuV9+gWNHXi+tXT86Ix8iDAXZ9lKVgE+k2WJcwPg==","signatures":[{"sig":"MEYCIQDvisd4PG9V0HmHHP8y1o71y6von9MK7oHDmU4E5RjVtQIhAPoImMbc9wECQm7ToGK6A9LCKDWZ/9MdlkZygWGvfIwk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":158118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSuW2CRA9TVsSAnZWagAAsF0P/iDrZzfeoKznJ9fkp2pf\nbMl/aQUKSDtVURHsZGbqG7mfm+1j19rPHQ3AIlwLmefFKMdRDndxpj73QjTo\naEZ8ZXFKA7iZfMzfwJ6ufbtCC0pHHMU9c55S/NLISljbzHjPTVBbwgyO/ccD\nYvSV7jip+fsOzjvKAQsUuY2EzjkVZWCas9/Fh5zDcGOMvM+pCpMVxXSumScE\nZSX/DRktu798WEkERwZ9YXyNc2dDUvFSALq0mgYxCe/j8M0IbqA7Rs1/Wm9T\n4qt/fzUIRaUrw7rIu2JUM3dpNAZRF0sFY0Yg67N/7W89NXATlpiog6o7A+ur\nlHb2zdSGEd5l3WFnaXa/criIIlef4xeD0Kiq7XGKePldQf3blBT1C+jBktfP\n2+zuqY8CxzHnWGIlRx8DTdZgQDlaHda59nWMaBs3M5agPAvYBDF1UC0YvlcU\n7ITAmD1WLjOZAxnoKJ6yKSh3+k5ZISkVRJF1Nq/Fv+/r9BPpuqP3PY87qWcO\nVgQX6/yKnW35DDQ4zp8kkk64dhS3uJRx5fPNgXi8S2iAUMj75K7UTYL0tUIr\nqLTowX3gGXJPeTksPAA7QPMCploIawjq3SGNMzIc444dC/J70ZXahX7tkPX1\nKUxN5WZ/sk2jPdcDsmh1t2pjbrmsMNDUu2GOsxS2wfGgv6/HOSPHaVrDVs29\nRNHb\r\n=ZmJU\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary (Deprecated)\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.","display":"library","gitHead":"978dd761a8b7e02a6c70f8093cef09cc6e5314ce","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},"deprecated":"beta","repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.13.4","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.16.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_3.0.4-beta_1581966774176_0.8618562942992771","host":"s3://npm-registry-packages"}},"3.0.4-beta.2":{"name":"tc-tool","version":"3.0.4-beta.2","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@3.0.4-beta.2","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"a797ad659b6e4b157e3060899451e3bf9f0ec845","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-3.0.4-beta.2.tgz","fileCount":66,"integrity":"sha512-PULpEhUWWVIzbw+SXKir2lxotmVB/IuIN86H2J08kPG77Bl+8yyXAGWhUyRc2hwFwOQ2FFLTtRVt7yDv0SkIeA==","signatures":[{"sig":"MEYCIQDdHZ0ev1kCiPJgdREM5WFp80QFEdu0grTyGm9I0sxLRwIhAJR8ZsZ75otNhADNemlnaKuR7lUVcD0iGviO3AxPHOOy","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":159527,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSvKdCRA9TVsSAnZWagAACfIP/Rdhe7pNH/vLsi588WIZ\nVsBckGyCMQfeIaG2PCJcQPxhuv8IUHgeyVHkuU9OcnzTr88yCneQb8dRdVOO\nYIoQzmTRJOd5IwrhLDmGTSVaKZQ4zkylmHP1mR1pU8eiBFvdW9t1v0iXVpZ+\nGab6tSOgq23BVGwQaV2uDDOf0gnm0sITcY9RrGiDEiH6qQJruX//1Mozhg0N\ncGn0mN1xO4mjUjJKoXABppBOh0JIhFsqLhech1uc+ePB9Iu/FfT3yW3lQmRI\nQ2I8dvWxKnw74AyzJoL/dDenQJQ+ulBPH5T6/zphIobMmNU5xKCRGNGSGWgA\nRRpeQYxQi0vZgVvGep67uOHrhX/GqN4TSzMBcUxO+OYr3JrgL71pkFhB/0hf\nFKVuvxzm1ZS08PHDTWlfBK6FGxtGFamzQ9BoS2Tb3ND+b2M0rwEE6JJK7tGq\nRWipRUPnSq85XBukcijmZPIkGCCJzoH1qMe1zP1nAohhdGVxov6I4qNC3E/N\njvD/EDXMnsREhKMv4dI06llYEwaFPlh/6zWK6G3Rkk1GWgPVNd8ahAnM9sns\nP+GZSLbMchCN3bJJTs9vb7EQKun+ccKizzBvSnCBqEz5uz1c2CZes8RFXLf+\n/zQm6ZrZZWXqSIeFMYYS3GZUtrNa4shvOAn0D3cqCcHVpAK7i2iwfVPrgGCk\nwAA3\r\n=j1FO\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary (Deprecated)\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.","display":"library","gitHead":"69857d3cd62a6dc18e9c39ace664cc463af3be04","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},"deprecated":"beta","repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.13.4","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.16.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_3.0.4-beta.2_1581970077502_0.1445679762695251","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"tc-tool","version":"4.0.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@4.0.0","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"558faaaeaf4753229453fb89cafa94a1a4f8469b","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-4.0.0.tgz","fileCount":66,"integrity":"sha512-VC7rnCejGx2aG5LOGbCQXY1wOTpjsXTskhrkLM7oonbLFkBl9YBafzWO6ncvbohHDHaNMTY8SJOiI/I0zEY42A==","signatures":[{"sig":"MEUCIQCeCHa69EphKyc4ZLCHOtSBEQQXtHsqCV0IUNv0uvfVOgIgLGkNo2jynylXEpENQcGIoNSaB9QN2ErrVndSh002P2g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":160450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaTt/CRA9TVsSAnZWagAAKfgP/0lhIFoGnnmmlVP7XbGW\nRVwDodm4CaNMe14bmYwroYkPivrZYgKExHAm2W0pQ0qxCfN62UYTC6nuBN89\nAXFQ6CdJKUs55xpoYy+2TPGcLgCxIbgxkoiYLqQMJNMpTPUdy2ED+6Ln2MSn\n4jgPJ4egF5rMd01euAUFPvSuusWntuyZFQrpx2CQ3QNb2ns4s/AI1zq9uG4x\nbP9aRHDaLu0Y5rJh3bk6HfizaObtI9wPZbsVg8I/OG3RorO1qWmybTpTbj4i\nmab5IjrF+sCyFHqd6H4cVkF1QQZCtx+u86PhtE0pRjszXMzFlYLOtXXa3f2N\ntFmmhE1HKYfhnZbeRiIKyCUtxS5oUJFuLg1N9lCgpi0N8x+eBF6qAz8cOoyb\n5JI1WxVMSNc2u5Gr3oZb8UaD7PK4kEa+oBtGGdRnLPNgZQSrCfIcMTv9G4Gc\nkWy8ZtA3Vfb+AVGpeAb47cFh4vY3GfsLRscSS0NJowCfMEHPo0nCt8NHRC+j\n78vn7wEWlnTx0bobS27Jkk7aeuyCEJrHEN70QvH1AVLRUaCrZkacQhbIL1/r\nqq1If/zEhRtbS/wvYWeTBRNTVeq8RnOyt9fvZ++71UTjET+8k4cV676X5s33\n3IDUkMnbETsGD/AEBJyNEvBx4PPogOTGLxkIid3esFrGwNl9Qfuugv8qaFnn\n/hsV\r\n=W652\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","display":"library","gitHead":"23f3cca906b58b86639375322254db9f8af95311","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.14.2","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.16.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_4.0.0_1583954814153_0.47683107326560004","host":"s3://npm-registry-packages"}},"4.0.1-beta":{"name":"tc-tool","version":"4.0.1-beta","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@4.0.1-beta","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"1ca00897c3609167157814fc2bbb2d9cb3cef028","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-4.0.1-beta.tgz","fileCount":66,"integrity":"sha512-g2BMMHeOG7pAHOGwaFh6EAIrX2oSyuHOpQmjRX1D0bwBecHvNu5nzfoRsUmSp+610Y6N8gh0FGtFHxzT8W5zqw==","signatures":[{"sig":"MEUCIQCex5TGglir4U+ljYAiQrkB+i9XkTBPdxG5/LVz85lIQQIgVa9yWtLON3mEV8sJfHXtVNf+7vV1VEtAzEdInVs3aTk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":164842,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJecmPiCRA9TVsSAnZWagAAiE4P/25HANA21KHGr71ImcKm\nk0IPFAGoMfByb1FyfFHc0+usiD6L5FnG+4iGd+JP9K6Ki8/uOTqcKjAagexi\nnvkeP4GBsVIiZOTmIEHwh9GVDKSa5lgo1IwvnckugkRDIqtnBs1uamQJh3T/\nNX9DP8wTNtQH/kj6BAHvxeLx5nimLrpGDTF9ABjgw/K7IuEnC2f6Xaryc3Iv\nNj9JOy2j72HMyBPqquz+IwBKSK5pvREJS/RkwCiBZodes3S725iDjDeOIw5Z\n6oXfQDFSbEVZlAHdf2lD1AXG9tn5wUaN5MIAqoI/dykMdFs1lkyNk2lplXru\n2+B3aVHcE/9DfzMi9pL3IjJS3HLlQrlt3eiOijOkKfPnW+NO3zF3AFnhIdRw\nBNOtGYG+S0+jPGPenSmL2fm2kQiHNnAP2y+0QUFnvPi1kgZs/6C4Ze+CR6Nu\n/T0W7JhkoN17HqdSqn8dLpGjs7dTPAF83cB2jvulEn3EaZVO5ErA8stZP6cb\nBIlH4TtPW31Kz69oJbCErg7dNtEOY8VYgyBuCQ2w3lmupYi0FVyKINiy65h6\nLfWldUx6MG/wV0aZuR39/Hix+3pPInqpqR7FiFUJbN5U0LBDLYV2WEUUmLol\nTntkQTE0i0Aimm+ZohiWtq5NRo474HAKyoGLfe1o9ztzwkoGSlq9mONR79jn\n26w/\r\n=8Fg/\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary (Deprecated)\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.","display":"library","gitHead":"23f3cca906b58b86639375322254db9f8af95311","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},"deprecated":"beta","repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.14.2","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.16.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_4.0.1-beta_1584554977683_0.5185598310881863","host":"s3://npm-registry-packages"}},"4.0.1-beta.2":{"name":"tc-tool","version":"4.0.1-beta.2","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@4.0.1-beta.2","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"3a4a1c34192667640d0f75e90440b99937e0f370","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-4.0.1-beta.2.tgz","fileCount":66,"integrity":"sha512-SmWukEipU34mceLm7TOOu/eXzBu+qbaLlIU4+26j1WT3SdsH6xpGrygXyfGJ6KHvGtV/yhXNCqqvytpX/I0czw==","signatures":[{"sig":"MEQCIFOicg3WZ0Ozu53BvoPSqPSVzet7CjOysSTa/6DFabJRAiBIz1xtkqC+DuvpKGwZJCUhvjuWJlIrssmRjJ56c7k4PQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":164812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJecmoHCRA9TVsSAnZWagAANd4P/RPFp/kKIHCeVy6hcWO2\nBLDtlopoq1fzFnSHPSrgzS5zOm02UrDmj4qgRvFblZsRNkp9ck6OR4s/dLPq\nyr7Ri80m6InwMMAYSZWItCtfk0NeElpTKw/gXPKxDbtuoobhD1PNCn6L3sSP\nnJ2OLniGSFfmn+Cccl++FSgdQLb+LeagZtxAta5+mKjPCiRBZs0EwVrn+rAa\nfnXTpwiTjuX3OHETCCyZfmEIuyGXjSm2eZO9QdvyKJXPVbcIYyIWtrPRubGv\nkQkKje22JgZjjhHB8G1uz8Gu4TAUTbJw/ABzcvhsXYgcsK5l9aYc5d5EhF2f\nbT7BFryuiKFWhsmecUBJsoeM9nBjyoZ7fGyfeKPo2WCOgwEt+D1kdqd5bkhS\nwcwSIaJBlpzFci2Rd/idqdHPxu6bsdf61nIH6Vr3cXKkhAqbN4QGgWms/Ey6\nrnr3z+k2emIeNK8K7+ePYa7/ZjGivOVju8TscVhrR2SQM4EQTYsO5O8AY/bG\nOYgOrYVaFQ/XwZ4OuCbh9u98uWZspIIIe8HpTcz2LsVaR3wgUUHXB/EzxU5L\nY5ZEiETu4yqBn+4jLxAZA5yQGBWwGbxFseGc3LA+OJvH0yitNUiuyjunrr5I\nM2RLv56MiRhU2urf0e3p8qux+NRzhMHAT3pyqn0YmwwBNKGYjBqPGkzT9amh\netWa\r\n=kalc\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary (Deprecated)\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.","display":"library","gitHead":"c7ac910eae2747e3f96cef0187f5af1db9401484","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},"deprecated":"beta","repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.14.2","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.16.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_4.0.1-beta.2_1584556550830_0.16964027754272015","host":"s3://npm-registry-packages"}},"4.0.1-beta.3":{"name":"tc-tool","version":"4.0.1-beta.3","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@4.0.1-beta.3","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"54dc9175da9da56fb5163306ed010aa696096aab","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-4.0.1-beta.3.tgz","fileCount":66,"integrity":"sha512-XtkkCpMISigT4PLhedGpS8hcAt4Sp5A5/7LX/WnxPcMEZm6jrJZwlVOIjGUirnioiFy5PwSfgQkCqDDibNEprQ==","signatures":[{"sig":"MEUCID2GHJNpSRf+3zGEy+wxy3QITI9wLxUVMEfZvf5RmzgKAiEA/inURpyBsDYAm/IhTHw+WTDkLE+Lxz26YYfB7tcT6P8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":165341,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJecnd7CRA9TVsSAnZWagAAKu8P/2r0NlO0UL8KSeNRCi00\nUDkqMy2VrK6k+e/bK8ArdMPZTL63pXRX+Zp7kfFYEAwmrIfHLpONFRYzYSbf\n1Fd7sxE0CLfYNZc/wQqgkKe/v/VagKHwcGa/6axFDVHl/gAryJamhGdeeHgZ\nU51q6c8V/YbdNGz4BDsAolLMhHsNOfeuc6AhtryCM0jOKefcHeI6e5F1QvHR\nMEUpyzOtuS8h+HvnaVq13LPrn9h1X9macVAHJB1saj9D9XySLLihh8N3BIIQ\nPUsjwv7Sa8UIXbN+ECBpPyMv1LTVDRyWb2GXeEXY8HJXqWaqKRsSFtOrkY5x\n0GEtKSgKp1MOzChCYrdhvKD4rvTMkfw/IE43BwnOiOUcWq206G1+LQrC65Qa\nLnauZvH5qd2x2OGRQZblHwYnGoKuCtxvMl38rHuaFMxe0MTBr7UJZjbCLLpV\nJDCfB+0un5ImbziDVmAyDigGKjTC1pcQ+Vi3H0FHwX0WUS2AcpPfujrWyMZe\nQ/63i7I3QvWzsX3Py50xmq38n4KCNXFHTVCJpROxuajeF55iBsuDTXFmHot2\nXllp7LgSFndFvAQwcRmm/oK5UTz3cxqxGxUDxZwyqgowUck2nsvGhIG3r2zM\n6gBWL7vaKF9wBhaQe4mdAcvMuz/CGCb5VRWu3JV5Qd2TJzl5r3XokQ5ZEhE6\nAdn4\r\n=Uf2i\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary (Deprecated)\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.","display":"library","gitHead":"86e78329aefb857f64869306f4db4f4bba61a136","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},"deprecated":"this package has been deprecated","repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.14.2","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.16.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_4.0.1-beta.3_1584559995160_0.22432671866938803","host":"s3://npm-registry-packages"}},"4.0.1":{"name":"tc-tool","version":"4.0.1","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@4.0.1","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"9ea0d6b79549dd450413978112e0b397149b6128","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-4.0.1.tgz","fileCount":66,"integrity":"sha512-Uk2nbSwP8b81kDg8oaMUDWgFecT41e332HRvOR9WqY2ETKNUvePdozr23QhOOxYC0hTcWQ7CXy2xxrI20fglcQ==","signatures":[{"sig":"MEUCIQCS03BujO3TF51h8WGFi53y5qsgXTAfp9zN7gIbbvJTYgIgdP5CQgEESwgVpf7QNssuP9x9SsDfbvP7txdFWp+xDmE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":164775,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeMduCRA9TVsSAnZWagAADXcP/iHHLCSOIBvhE1OVBwV7\nWTOrEY1Nowyf+2+aS+Ybhoyn4gsZjzio2Tg7Z6QFIcV6V2japJACFWrCJMOx\nRfwUy2Bw3ksIAGwPATvQ0ih/ddldKrLh/z0ZTkQmWXQetCM6vsJyPPl+sHOo\nFcnAvEc2qnN0ORabGnWhl4gWbSJPKl5aR+Adx6jGiqoc+tOaClvxCBknNKXP\ntyiOZztG6mjyHAWeiQPrdGvaMMvMz9Yem48Hv5JnPClI+XYXdR4kImG5zSy9\nSyP6LNPlW3Iq8QUHRN4xbiOufMk1cbipPUdDP/Yq2nB0cvKViQ4B8BmC2HHH\npmD9JAxDYu+4UPRCkfuKpN4KbOMWQMVpnG4ZX2sXDfjQIMoPXzEh9sgbe8QM\niVQxJ34+63nzdAcIsQ+BpPfXOw5nZoW/S1RWXTZl0y5LTtFUgtAy/7EDQOpz\nZCeMVEdpK9delKkYCrwgIWfl822e+PMp60FpnQD4HLWrTZ7BCtFaLKd9XDEO\nzixCLORtxHeiJzrDoHdLqLM4sL6hwaTajwZ1sXWTmTPk9muBosDkXbTmyMMB\n1JRizUiveB6pLPGmreCzKmeAlJS8FoBi/KwFDAQahnzc/fmt2dI+GBr793IS\n0T6likn/WL5FfzjnoOtkbhUXU1t5WxH/RUFRCC5QBao/DnKMvhIEzesWFKWE\nZeNs\r\n=JbuB\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","display":"library","gitHead":"85d77438e4969df5845641867d7079bd19801faa","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.4.1","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.16.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_4.0.1_1584973677821_0.8320114889732171","host":"s3://npm-registry-packages"}},"4.0.2-beta.13":{"name":"tc-tool","version":"4.0.2-beta.13","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@4.0.2-beta.13","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"330e5905b21e1e2a66d5a7ac1854f4b723627b7e","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-4.0.2-beta.13.tgz","fileCount":68,"integrity":"sha512-qQT6stTqegLK0LeI+mIXvW6ADqGv/SQpOr64ztmN4BiehemFjrDV0ReJBt5as16J6bTn4nD8s5KvHXcpYro/Sw==","signatures":[{"sig":"MEUCIDf4D2e1xpwkxkbKVGLQ6Ekc/lEmGyIxjQsvKq8Klv2/AiEAsZaezpB2wzZpRvZ7fiqazjT7uES9HpqDO+crfhruLGk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":184343,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehOdDCRA9TVsSAnZWagAAGrQP/24DMtA6pZFWI4wh1HWm\nLIgc2y4ge2s8ihvWAhpC4dh2AwpDxtu9vGC57WZrvFbrhu7+CiuQULQV9bpv\nNWy8Do8ALD9ZnWz63TKqC+l10f4RTM8GAGAEBt9wXFIZQMiGe+zaBqlaEss3\nZbUZKWbVAOWOjVkUtj7VUjLs2rlRu7RsqRTxwUqNudnrL1+nz+g6JHI1+U47\nFM6hDPP+XV6YN+yFuw7jHai3uMa2Fls2pejYm82zTTx+b6lXraLONB5yGORZ\noqAVZJQeNUOjJtaVweg7w0prC3MWFZGs7C6a+CXO+4ZAcVu4qnPMNBld6Rpa\nKgcnfnywb5dHqZ0Hb5IX1sKPkZLMyA3TVEoimJs3YcjamDBwaRaq3kZyW61W\nbE1m3fG2VnzvbNFijWVlvmvtI2lGDJgADqOOXXVD0PiL4iHQtQ7FNLHrl9D2\nRp+CBEcFlP5PR+pYpgHvXqBVEv38y/hB+mRe0fh1zmb9ZLuSfcnnfo1QeHyu\nfXu3W1X46DSytLGPSv8y/KzjkqXeyzYUvQ6y63q+QGl0GdbDgvh0xJHip00n\njwd8WsmOPopSDYaV/sXFtotX/vDD6cWKViQW/F2xKgrNye7P4FMnMOy/W+Lg\nijp6yY62vEEJ5p7EIdrQtmWX2S2Un2/PefnJGRYmp5O1GmE1dsz5SdIjTWka\nbwVP\r\n=G83q\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary (Deprecated)\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.","display":"library","gitHead":"6f33c1effc5eefa7d0e4cece120ef7d992df4f14","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},"deprecated":"this package has been deprecated","repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.4.1","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.16.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_4.0.2-beta.13_1585768259124_0.2659960247047273","host":"s3://npm-registry-packages"}},"4.0.3-beta":{"name":"tc-tool","version":"4.0.3-beta","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@4.0.3-beta","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"1dd2acec54e1cf6945e437fcb5cbef744a188a54","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-4.0.3-beta.tgz","fileCount":66,"integrity":"sha512-UHU4qxxZZYp1Tueqq7tjSEM4PTYw13NMrL7NsO20PgvvMDCGS36J0SEhZh00xZOFCRAFtAlVRv5oEDyJArawvg==","signatures":[{"sig":"MEQCIBpTCFzwSJPz5r3Khj2HyWJ7K9g2TgbhqwjD4feB6+nqAiBi2+DQgo70Q2f1kJAEl1UYf0HF/9k+BMwZ3uVV882/Eg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":167273,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehdwHCRA9TVsSAnZWagAA+LwQAKB2lS9k7Spepvd269Nj\nHmaSnFICrpITfXmirTGOHyA9498aXU/7ce2FEwown6AZMxObDmI9/Y9MR+Su\nEVHfhZFU5NVfg9UaVheYOeeEEttC8yN2tlt9ZOozHa8ZmRlazyu+Hu/m3otV\n6tob3yWFaymuno+WSLFWBVkyYeyVdBjzdpJ1LzEt6h1O6b+CqJqsnBFudfal\n3hGuNH5YFMJngWhpKe8i4H2s/icDXvh63srneFr5l/kVaZJg3jg51OxLv/ro\nETlw2+6be8iV704ByVGh7ntPjxWdO86wbmDh2ow8x6Yhc55HCZvowpg7df/2\nPoE7rJms6MHh7WqKstvdtVMC5pgdeypu+Jvhrly0wlNtDWWcWDiAVsGVewTq\nMedx/uR9XkdNWn0Oh2m3iwARLK+jrPr/cDFxBA9xXw99ma6eZgn55qo3Ufal\nC+GTgjAZSyqhUVMIotVWRiOBFuubA0HsvgnyE1mnONodTDX/HqnZzb+DFqh+\n4VHLkBbIxwxFfReIdiY6sxU4qF/Qe9mFAi6WrNmg/yS22zcUukzQVfThGpO+\nc/QhesHG87KxnQVBGkP45gM8zEQ0US6zxyqHHXug80pd6fWoyISIaqo0vE0i\nuOmBekSCla3JsWrPPOVddkfklGA2erlG0YdE1mbL9pIEtp5cX1brvEoF8nBF\nr579\r\n=itE2\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","readme":"[![Build Status](https://travis-ci.org/translationCoreApps/tc-tool.svg?branch=master)](https://travis-ci.org/translationCoreApps/tc-tool)\n[![codecov](https://codecov.io/gh/translationCoreApps/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/translationCoreApps/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary (Deprecated)\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.","display":"library","gitHead":"85d77438e4969df5845641867d7079bd19801faa","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},"deprecated":"this package has been deprecated","repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.4.1","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"8.16.1","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_4.0.3-beta_1585830919073_0.09245869931012884","host":"s3://npm-registry-packages"}},"4.1.0":{"name":"tc-tool","version":"4.1.0","author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","_id":"tc-tool@4.1.0","maintainers":[{"name":"bspidel","email":"bruce.spidel@gmail.com"},{"name":"klappy","email":"christopher@klapp.name"},{"name":"macolon","email":"colonmanuel7@gmail.com"},{"name":"neutrinog","email":"info@neutrinographics.com"},{"name":"photo-nomad","email":"bruce.mclean@distantshores.org"},{"name":"richmahn","email":"rich.mahn@distantshores.org"},{"name":"royalsix","email":"jay.a.scottjr@biola.edu"}],"homepage":"https://github.com/translationCoreApps/tc-tool#readme","bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"dist":{"shasum":"b6004af0b80bb4913d6eb24545289f92abc9c1b8","tarball":"https://registry.npmjs.org/tc-tool/-/tc-tool-4.1.0.tgz","fileCount":59,"integrity":"sha512-6WNfnp7mnOB2QKaI+hVk+qAm8Pxa2SirGmeZLBa/rafcRR7Q1vKJP7GFWo4kQfuB4TRGUf/Gci6621FnfU49pA==","signatures":[{"sig":"MEUCIF9Y+M3IXlCvACBr1r8GeEVl8cX5uCOdVU3GKXK9fTZyAiEAzVwJ4EJUnl2xSc3+KRNapA7/ZU+pEB0IKt6BsbQM1FU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":144933,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2863CRA9TVsSAnZWagAA8XkP/0pZAGmPZ1TPNwPyzJy4\nBbJOzVxvS6Tzgie6ojm7e+IPI7Rp3M/dhbnsRum5D2hEBzFo+u7tZGJO0Lwl\ngrAnvKA54EvRO2jKWCp7uhdXo8ofpidEy9vgVK+juc/X9YfFfZCQZ6+IzTF3\nnUpEUT5PBBjSJ0rzUp2D3U0Z27DPWhPDLYn+N6M/pOhLrt3Mu36K2vH892VK\nQB00OFiTmY5TVYn0zF/S+rB30vMB/qDTveDCkt6JgjMLh974yxfJ1AQaycHI\n/qJmqpj7bBG5OFm+73HpkJSbDEWagHS20BimkhQZIx9UoR+6MxitfBdfLlb8\n04kkjmKgsAPR8eoegZ1R1J40gntzSokILaKkeS3+ncmeTKvPSSC5bxck7hDM\nrwAN9Nd3317fpIPZ+Ttg80lojlX4lGjtouMNn9+a3b6pCFGJQjhVeU4QMssl\nd4XGNv6nLTULgIZZyXGT6Y2ux8TlNZAMGyeiRHbcOSmuh9Q58AOTMSqKpljM\nKvaDYJGVCzkMDFnqLhymBHFSlz/mJVOKgYkQC1QVEi0Ocj3LIVE5EYfoUUlX\nE1pyFCGH66uPao4VKueLQmRjSBeAvgEw7Q2v9NaLCvkbMuxZUebJCsQzId5y\nJWj+pgNFzsrmHoU6hi/Rb5m6bR7tHr3UAvSLQA0Ao+/cya2XH3aOu0JMuYze\nbEi4\r\n=v2mJ\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"rootDir":"./","testURL":"http://localhost","coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!src/index.js"]},"main":"dist/index.js","display":"library","gitHead":"ecf5f2f4defd4094c02c7f0ebb30b998525bd45a","scripts":{"test":"eslint ./src && jest","build":"babel src --out-dir dist --ignore '**/__tests__,**/__mocks__'","prepare":"npm run build","prebuild":"rm -rf dist","postpublish":"git tag v$npm_package_version && git push origin v$npm_package_version","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"macolon","email":"colonmanuel7@gmail.com"},"repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"_npmVersion":"6.14.4","description":"A HOC that provides a tool interface with tC core","directories":{},"_nodeVersion":"10.19.0","dependencies":{"lodash":"^4.17.5","fs-extra":"^7.0.1","os-locale":"^3.1.0","path-extra":"^4.2.1","prop-types":"^15.6.0","redux-thunk":"^2.2.0","redux-logger":"^3.0.6","redux-promise":"^0.6.0","react-localize-redux":"^2.15.1","redux-batched-actions":"^0.4.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","react":"^16.8.6","redux":"^4.0.4","enzyme":"^3.3.0","eslint":"^4.18.1","babel-cli":"^6.26.0","react-dom":"^16.8.6","babel-jest":"^22.4.0","redux-jest":"^1.1.1","react-redux":"^7.1.1","babel-eslint":"^10.0.1","babel-preset-env":"^1.6.1","redux-mock-store":"^1.5.1","babel-preset-react":"^6.24.1","eslint-plugin-jest":"^21.12.2","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","babel-plugin-jest-hoist":"^22.2.0","enzyme-adapter-react-16":"^1.1.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0"},"peerDependencies":{"react":"^16.3.0","redux":"^2.0.0 || ^3.0.0","react-dom":"^16.0.0","react-redux":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tc-tool_4.1.0_1587011454658_0.6452701591839418","host":"s3://npm-registry-packages"}}},"time":{"created":"2018-02-22T18:36:46.895Z","modified":"2026-06-26T18:23:33.792Z","1.0.0":"2018-02-22T18:36:47.065Z","1.0.1":"2018-02-24T00:52:36.914Z","1.0.2":"2018-02-24T01:07:33.289Z","1.0.3":"2018-02-24T01:25:59.200Z","1.1.0":"2018-02-27T22:03:45.138Z","1.2.0":"2018-03-07T21:48:01.286Z","1.3.0":"2018-03-15T17:37:28.410Z","1.4.0":"2018-05-02T18:16:17.737Z","1.4.1":"2018-05-08T00:32:16.222Z","1.4.2":"2018-05-08T01:13:45.485Z","1.4.3":"2018-05-08T20:38:40.372Z","1.4.4":"2018-05-08T22:27:10.797Z","1.4.5":"2018-05-08T23:12:54.622Z","1.4.6":"2018-05-08T23:34:36.888Z","1.4.7":"2018-05-09T01:08:44.840Z","1.4.8":"2018-05-09T06:13:01.075Z","1.4.9":"2018-05-09T06:29:13.265Z","1.4.10":"2018-05-09T19:03:13.999Z","1.4.11":"2018-05-09T19:20:09.508Z","1.4.12":"2018-05-09T20:01:01.240Z","1.4.13":"2018-05-09T20:40:51.089Z","1.4.14":"2018-05-09T22:03:11.575Z","1.4.15":"2018-05-09T22:09:06.444Z","1.4.16":"2018-05-09T22:11:38.628Z","1.5.0":"2018-05-11T00:32:46.400Z","1.6.0":"2018-07-12T19:59:12.028Z","1.6.1":"2018-07-12T20:23:38.101Z","1.6.2":"2018-07-13T23:09:56.701Z","1.6.3":"2018-07-16T20:56:01.126Z","2.0.0-rc.1":"2018-09-07T19:28:53.002Z","2.0.0":"2018-10-26T17:48:21.822Z","2.1.0":"2019-01-10T06:22:34.885Z","2.2.0":"2019-08-01T22:03:35.223Z","2.2.1":"2019-10-03T17:01:44.702Z","3.0.0":"2019-10-14T18:23:18.799Z","3.0.1":"2019-10-15T18:40:13.574Z","3.0.2":"2019-10-21T15:58:11.606Z","3.0.3-beta":"2019-11-20T14:46:44.087Z","3.0.3-beta.3":"2019-11-20T21:30:05.729Z","3.0.3-beta.4":"2019-11-23T12:12:19.817Z","3.0.3-beta.5":"2019-11-23T12:27:36.635Z","3.0.3":"2019-11-23T14:36:08.079Z","3.0.4-beta":"2020-02-17T19:12:54.412Z","3.0.4-beta.2":"2020-02-17T20:07:57.601Z","4.0.0":"2020-03-11T19:26:54.666Z","4.0.1-beta":"2020-03-18T18:09:37.789Z","4.0.1-beta.2":"2020-03-18T18:35:50.999Z","4.0.1-beta.3":"2020-03-18T19:33:15.340Z","4.0.1-beta.6":"2020-03-23T12:04:24.901Z","4.0.1":"2020-03-23T14:27:57.949Z","4.0.2-beta":"2020-03-31T17:57:43.832Z","4.0.2-beta.2":"2020-03-31T19:09:09.596Z","4.0.2-beta.3":"2020-03-31T19:41:02.800Z","4.0.2-beta.4":"2020-03-31T19:43:20.827Z","4.0.2-beta.5":"2020-03-31T20:15:25.613Z","4.0.2-beta.6":"2020-03-31T20:32:03.041Z","4.0.2-beta.7":"2020-04-01T10:17:28.442Z","4.0.2-beta.8":"2020-04-01T14:16:30.726Z","4.0.2-beta.9":"2020-04-01T14:22:06.750Z","4.0.2-beta.10":"2020-04-01T18:47:48.039Z","4.0.2-beta.11":"2020-04-01T18:59:00.141Z","4.0.2-beta.12":"2020-04-01T19:02:06.882Z","4.0.2-beta.13":"2020-04-01T19:10:59.250Z","4.0.3-beta":"2020-04-02T12:35:19.200Z","4.1.0":"2020-04-16T04:30:54.949Z"},"bugs":{"url":"https://github.com/translationCoreApps/tc-tool/issues"},"author":{"name":"unfoldingWord","email":"info@unfoldingword.org"},"license":"GPL-2.0","homepage":"https://github.com/translationCoreApps/tc-tool#readme","repository":{"url":"git+https://github.com/translationCoreApps/tc-tool.git","type":"git"},"description":"A HOC that provides a tool interface with tC core","maintainers":[{"email":"jakobaleksandrovich@gmail.com","name":"jakobaleksandrovich"},{"email":"christopher@klapp.name","name":"klappy"},{"email":"bruce.mclean@unfoldingword.org","name":"photo-nomad"},{"email":"rich.mahn@unfoldingword.org","name":"richmahn"},{"email":"jag3773@gmail.com","name":"jag3773"},{"email":"mvahowe@gmail.com","name":"mvahowe"},{"email":"abelper54@gmail.com","name":"abelpz"},{"email":"eliasrpt14@gmail.com","name":"eliaspinero"},{"email":"info@neutrinographics.com","name":"neutrinog"}],"readme":"[![Build Status](https://travis-ci.org/unfoldingWord/tc-tool.svg?branch=master)](https://travis-ci.org/unfoldingWord/tc-tool)\n[![codecov](https://codecov.io/gh/unfoldingWord/tc-tool/branch/master/graph/badge.svg)](https://codecov.io/gh/unfoldingWord/tc-tool)\n\n# tC Tool\n\nThis module provides an interface for connecting custom apps/tools\nto [translationCore](https://github.com/unfoldingWord-dev/translationCore).\n\nAmong other things, this module exposes a [HOC](https://reactjs.org/docs/higher-order-components.html) that turns any React component into a tool.\n\n## installation\n\n```bash\nnpm i tc-tool\n```\n\n\n\n## Quick Start\n\nTo create a tool all you need is a component and a catchy name.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\n\nexport default connectTool('awesomeTool')(Container);\n```\n\nThe above code should be placed in your module's main file (usually `index.js`).\n\n## Advanced Usage\n\n### Locale\n\nLikely the most important feature you'll need to include in your tool is localization. Adding locale is optional but strongly encouraged.\n\nLocale files are structured in [Single Language Format](https://ryandrewjohnson.github.io/react-localize-redux/formatting-translation-data/) and named as `Name-locale_REGION.json` e.g. `English-en_US.json`.\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport path from 'path';\n\nexport default connectTool('awesomeTool', {\n    localeDir: path.join(__dirname, './locale')\n})(Container);\n```\n\nThen in your component (or API) you'll have access to localization tools.\n```js\n// Container.js\nclass Container extends React.Component {\n    render() {\n        const {translate, currentLanguage} = this.props;\n        return translate('hello'); // returns \"Hello\" in the correct language\n    }\n}\n```\n\n> **NOTE**: when using locale, if the selected langauge in tC core is not supported by\n> the tool, it will first try the system locale as a fallback then finally English.\n\n### Reducer\n\nIf you would like to utilize Redux in your tool you can give it to `connectTool`. Then you can use the standard `connect` HOC from `react-redux` to subscribe to the store.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\n\nexport default connectTool('awesomeTool', {\n\treducer: reducer\n})(Container);\n```\n\nThen your reducer state will be available under `state.tool`.\n```js\n// Container.js\nimport connect from 'react-redux';\nclass Container extends React.Component {\n  render() {\n    const {myValue} = this.props;\n    return myValue;\n  }\n}\n\nconst mapStateToProps = (state) => {\n    const {tool: {myValue}} = state;\n    return {\n        myValue\n    };\n};\nexport default connect(mapStateToProps)(Container);\n```\n\n### Middleware\n\nThe tool already comes configured with the following middleware:\n\n* [redux-promise](https://www.npmjs.com/package/redux-promise)\n* [redux-thunk](https://www.npmjs.com/package/redux-thunk)\n* [redux-logger](https://www.npmjs.com/package/redux-logger) (when `NODE_ENV=development`)\n\nIf you need to add additional middleware you can give it to `connectTool`.\n\n> **NOTE**: middleware will be useless without a reducer for obvious reasons.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport reducer from './reducers';\nimport {createLogicMiddleware} from 'redux-logic';\n\nexport default connectTool('awesomeTool', {\n\treducer,\n    middlewares: [createLogicMiddleware()]\n})(Container);\n```\n\n\n\n### Tool API\n\nIf other tools need access to functionality or data within this tool you can expose an API.\n\n```js\n// index.js\nimport Container from './Container';\nimport {connectTool} from 'tc-tool';\nimport MyApi from './MyApi';\n\nexport default connectTool('awesomeTool', {\n\tapi: new MyApi(),\n})(Container);\n```\n\nFor more information about APIs see [Tool API](./TOOL_API.md).\n\n## Other Features\n\n### Error Boundary (Deprecated)\n\nA semi-user-friendly error screen is displayed if an error occurs within the tool. This allows users to navigate to a safe part of the app.\n","readmeFilename":"README.md","users":{}}